2012-04-23 2 views
7

AIX 64 비트에서 매우 느립니다 7 세대 RAM자바 시작은 AIX7.1

$ uname -a 
AIX server3 1 7 00036073D600 

$ java -version 
java version "1.6.0" 
Java(TM) SE Runtime Environment (build pap6460_26sr1-20111114_01(SR1)) 
IBM J9 VM (build 2.6, JRE 1.6.0 AIX ppc64-64 20111113_94967 (JIT enabled, AOT enabled) 
J9VM - R26_Java626_SR1_20111113_1649_B94967 
JIT - r11_20111028_21230 
GC - R26_Java626_SR1_20111113_1649_B94967 
J9CL - 20111113_94967) 
JCL - 20111112_01 

$ time /opt/IBM/WebSphere/AppServer/java/bin/java 
... 
real 0m40.62s 
user 0m0.43s 
sys  0m0.04s 

그것은 모든 응용 프로그램없이 자바 명령을 시작하는 40 대 걸립니다. JRE (64 비트)는 WebSphere V8의 일부이므로 20 분이 필요합니다. Application Server를 시작합니다.

동일한 AIX에는 또 다른 JRE (32 비트)가 있으며 잘 작동합니다.

$ /usr/java6/bin/java -version 
java version "1.6.0" 
Java(TM) SE Runtime Environment (build pap3260sr9fp2-20110627_03(SR9 FP2)) 
IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 AIX ppc-32 jvmap3260sr9-20110624_85526 (JIT enabled, AOT enabled) 
J9VM - 20110624_085526 
JIT - r9_20101028_17488ifx17 
GC - 20101027_AA) 
JCL - 20110530_01 

$ time /usr/java6/bin/java 
real 0m0.70s 
user 0m0.64s 
sys  0m0.05s 

truss를 사용할 때 발견되었습니다. 자바가 시작될 때, 오랫동안 thread_tsleep()에서 차단됩니다. 왜? 그것을 고치는 방법? 타임 스탬프

1.8662:  socket(2, 2, 0)     = 4 
1.8666:  _esendto(4, 0x000001001012B860, 25, 0, 0x00000100103F38A8, 16, 0x0000000000000000) = 25 
3.8671:  thread_tsleep(0, 0x09001000A030F400, 0x0000000000000000, 0x0000000000000000) (sleeping...) 
1.8669:  _poll(0x000001001012AA00, 1, 5000) = 0 
6.8705:  close(4)       = 0 
6.8710:  socket(2, 2, 0)     = 4 
6.8715:  _esendto(4, 0x000001001012B860, 25, 0, 0x00000100103F38A8, 16, 0x0000000000000000) = 25 
8.8723:  thread_tsleep(0, 0x09001000A030F400, 0x0000000000000000, 0x0000000000000000) (sleeping...) 
6.8720:  _poll(0x000001001012AA00, 1, 5000) = 0 
11.8726:  close(4)      = 0 
11.8729:  socket(2, 2, 0)     = 4 
11.8732:  _esendto(4, 0x000001001012B860, 25, 0, 0x00000100103F38A8, 16, 0x0000000000000000) = 25 
13.8738:  thread_tsleep(0, 0x09001000A030F400, 0x0000000000000000, 0x0000000000000000) (sleeping...) 
11.8736:  _poll(0x000001001012AA00, 1, 10000) = 0 
21.8741:  close(4)      = 0 
21.8744:  socket(2, 2, 0)     = 4 
21.8748:  _esendto(4, 0x000001001012B860, 25, 0, 0x00000100103F38A8, 16, 0x0000000000000000) = 25 
23.8754:  thread_tsleep(0, 0x09001000A030F400, 0x0000000000000000, 0x0000000000000000) (sleeping...) 
21.8752:  _poll(0x000001001012AA00, 1, 20000) = 0 
41.8756:  close(4)      = 0 
41.8760:  getdomainname(0x000001001012CD10, 256) = 0 
41.8763:  kopen("/etc/hosts", O_RDONLY) = 4 
41.8767:  kioctl(4, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY 
41.8770:  kfcntl(4, F_SETFD, 0x0000000000000001) = 0 
41.8773:  kioctl(4, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY 
kread(0x0000000000000004, 0x0000010010416618, 0x0000000000001000) = 0x00000000000007B0 
    0x00000000: " # = = = = = = = = = =".. 
kread(0x0000000000000004, 0x0000010010416618, 0x0000000000001000) = 0x0000000000000000 
    0x00000000: " # = = = = = = = = = =".. 
41.8782:  close(4)      = 0 

TP

Quit in sem_wait at 0x9000000002632d8 ($t3) 
0x9000000002632d8 (sem_wait+0x98) e8410028   ld r2,0x28(r1) 

thread state-k  wchan   state-u k-tid mode held scope function 
>$t1  run       blocked 31391751 u no sys _event_sleep 
_event_sleep(??, ??, ??, ??, ??, ??) at 0x9000000008365c4 
_event_wait(??, ??) at 0x900000000837064 
_cond_wait_local(??, ??, ??) at 0x90000000084521c 
_cond_wait(??, ??, ??) at 0x900000000845808 
pthread_join(??, ??) at 0x90000000082d2b0 
unnamed block in ContinueInNewThread(continuation = 0x6c6f636b6c002e66, stack_size = 7310577395057127012, args = 0x5f6f72002e666574), line 2286 in "java_md.c" 
ContinueInNewThread(continuation = 0x6c6f636b6c002e66, stack_size = 7310577395057127012, args = 0x5f6f72002e666574), line 2286 in "java_md.c" 
unnamed block in main(argc = 0, argv = 0x000001001000c178), line 532 in "java.c" 
main(argc = 0, argv = 0x000001001000c178), line 532 in "java.c" 

thread state-k  wchan   state-u k-tid mode held scope function 
>$t2  run       running 54329549 u no sys __fd_poll 
__fd_poll(??, ??, ??) at 0x90000000012c0d4 
res_send.poll(??, ??, ??) at 0x9000000001021ac 
res_nsend(0x100103f37a8, 0x1001012b860, 0x1900000019, 0x1001012cbb0, 0x40000000400) at 0x9000000001011d4 
res_nquery(??, ??, ??, ??, ??, ??) at 0x90000000012b5d8 
res_nquerydomain(??, ??, ??, ??, ??, ??, ??) at 0x90000000012ab14 
res_nsearch(??, ??, ??, ??, ??, ??) at 0x90000000012af08 
res_search(??, ??, ??, ??, ??) at 0x900000000107b50 
dns_ho.ho_byname2(??, ??, ??) at 0x90000000013a384 
gen_ho.ho_byname2(??, ??, ??) at 0x900000000163888 
gethostbyname2(??, ??) at 0x9000000001060ec 
getaddrinfo2(??, ??, ??, ??, ??) at 0x900000000102ba0 
getaddrinfo(??, ??, ??, ??) at 0x900000000104d34 
j9sock_getaddrinfo() at 0x9000000053caad8 
populateRASNetData() at 0x900000005347fc0 
VMInitStages() at 0x9000000053086b0 
runJ9VMDllMain() at 0x90000000530bb9c 
pool.pool_do() at 0x9000000052f29c8 
runInitializationStage() at 0x90000000530b890 
protectedInitializeJavaVM() at 0x900000005306478 
j9sig_protect() at 0x9000000053a2b9c 
initializeJavaVM() at 0x90000000530585c 
jniinv.JNI_CreateJavaVM() at 0x90000000530ea14 
jvm.JNI_CreateJavaVM() at 0x900000000ccc510 
redirector.JNI_CreateJavaVM() at 0x900000000cb5574 
InitializeJVM(pvm = (nil), penv = (nil), ifn = (nil)), line 1801 in "java.c" 
main(argc = 0, argv = (nil)), line 810 in "java.c" 

thread state-k  wchan   state-u k-tid mode held scope function 
>$t3  run       running 52887625 k no sys sem_wait 
sem_wait(??) at 0x9000000002632d8 
asynchSignalReporter() at 0x9000000053a3dcc 
thread_wrapper() at 0x900000000d00ad0 

!!!! ThreadDump Completed- detached from debugger !!!! 

업데이트

kopen("/etc/irs.conf", O_RDONLY)    Err#2 ENOENT 
_thread_self()         = 26738737 
getdomainname(0x09001000A00E44F8, 1024)   = 0 
_thread_self()         = 26738737 
_thread_self()         = 26738737 
_thread_self()         = 26738737 
getdomainname(0x09001000A00E44F8, 1024)   = 0 
_thread_self()         = 26738737 
_thread_self()         = 26738737 
_thread_self()         = 26738737 
kopen("/etc/hesiod.conf", O_RDONLY)    Err#2 ENOENT 
_thread_self()         = 26738737 
getdomainname(0x09001000A00E44F8, 1024)   = 0 
_thread_self()         = 26738737 
_thread_self()         = 26738737 
_thread_self()         = 26738737 
getdomainname(0x09001000A00E44F8, 1024)   = 0 
_thread_self()         = 26738737 
_thread_self()         = 26738737 
_thread_self()         = 26738737 
getdomainname(0x09001000A00E44F8, 1024)   = 0 
_thread_self()         = 26738737 
_thread_self()         = 26738737 
socket(2, 2, 0)         = 4 
getsockopt(4, 65535, 4104, 0x000001001012A934, 0x000001001012A930) = 0 
connext(4, 0x00000100103F37B8, 16)    = 0 
_esend(4, 0x000001001012B860, 40, 0, 0x0000000000000000) = 40 
_poll(0x000001001012AA00, 1, 5000)    = 1 
_enrecvfrom(4, 0x000001001012CBB0, 1024, 0, 0x000001001012B1C0, 0x000001001012A9E8, 0x0000000000000000) = 56 
close(4)          = 0 
socket(2, 2, 0)         = 4 
getsockopt(4, 65535, 4104, 0x000001001012A934, 0x000001001012A930) = 0 
connext(4, 0x00000100103F37B8, 16)    = 0 
_esend(4, 0x000001001012B860, 40, 0, 0x0000000000000000) = 40 
_poll(0x000001001012AA00, 1, 5000)    = 1 
_enrecvfrom(4, 0x000001001012CBB0, 1024, 0, 0x000001001012B1C0, 0x000001001012A9E8, 0x0000000000000000) = 94 
_esend(4, 0x000001001012B860, 25, 0, 0x0000000000000000) = 25 
_poll(0x000001001012AA00, 1, 5000)    = 1 
_enrecvfrom(4, 0x000001001012CBB0, 1024, 0, 0x000001001012B1C0, 0x000001001012A9E8, 0x0000000000000000) = 25 
close(4)          = 0 
socket(2, 2, 0)         = 4 
_esendto(4, 0x000001001012B860, 25, 0, 0x00000100103F37C8, 16, 0x0000000000000000) = 25 
thread_tsleep(0, 0x09001000A030F400, 0x0000000000000000, 0x0000000000000000) (sleeping...) 
_poll(0x000001001012AA00, 1, 5000)    = 0 
close(4)          = 0 
socket(2, 2, 0)         = 4 
_esendto(4, 0x000001001012B860, 25, 0, 0x00000100103F37C8, 16, 0x0000000000000000) = 25 
thread_tsleep(0, 0x09001000A030F400, 0x0000000000000000, 0x0000000000000000) (sleeping...) 
_poll(0x000001001012AA00, 1, 5000)    = 0 
close(4)          = 0 
socket(2, 2, 0)         = 4 
_esendto(4, 0x000001001012B860, 25, 0, 0x00000100103F37C8, 16, 0x0000000000000000) = 25 
thread_tsleep(0, 0x09001000A030F400, 0x0000000000000000, 0x0000000000000000) (sleeping...) 
_poll(0x000001001012AA00, 1, 10000)    = 0 
close(4)          = 0 
socket(2, 2, 0)         = 4 
_esendto(4, 0x000001001012B860, 25, 0, 0x00000100103F37C8, 16, 0x0000000000000000) = 25 
thread_tsleep(0, 0x09001000A030F400, 0x0000000000000000, 0x0000000000000000) (sleeping...) 
_poll(0x000001001012AA00, 1, 20000)    = 0 
close(4)          = 0 
getdomainname(0x000001001012CD10, 256)   = 0 
kopen("/etc/hosts", O_RDONLY)     = 4 
kioctl(4, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY 
kfcntl(4, F_SETFD, 0x0000000000000001)   = 0 
kioctl(4, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY 
kread(0x0000000000000004, 0x0000010010416538, 0x0000000000001000) = 0x00000000000007B0 
    0x00000000: " # = = = = = = = = = =".. 
kread(0x0000000000000004, 0x0000010010416538, 0x0000000000001000) = 0x0000000000000000 
    0x00000000: " # = = = = = = = = = =".. 
close(4)          = 0 
__libc_sbrk(0x0000000000020020)     = 0x0000010010421C20 

나는이 주제를 발견하고, 내 AIX에서 프로그램을 테스트합니다. hostname을 사용할 때 DNS 쿼리의 경우 약 40 초 동안 지연됩니다. IP 주소는 정상입니다. 내가 이름을 핑 (ping) 할 때 그런데

Java cannot resolve DNS address from AIX: UnknownHostException

은, 호스트 이름이 서버 3을 보여줍니다, 그것은 보여줍니다 PING의 server3.cf1.xx.xxxx.com ..... 나는 서버 3를 사용하여 프로그램을 실행 .cf1.xx.xxxx.com에는 지연이 없습니다.

갱신 2는 :

는 IPV6 문제입니다. -Djava.net.preferIPv4Stack = true를 추가하면 java 응용 프로그램이 잘 실행됩니다. 그러나 java 명령은 여전히 ​​IPV6을 사용하여 DNS를 쿼리합니다. 그래서 java 명령은 40 초 지연되고 java 응용 프로그램은 DNS 쿼리에 대해 아무런 문제가 없습니다.

Java 매개 변수가 아닌 AIX에서 기본 프로토콜을 IPV4로 설정할 수 있습니까?

답변

1

트러스 출력에서 ​​오랜 시간이 걸리는 것을 알아내는 것은 어렵습니다. (아마도 출력에 타임 스탬프를 추가 할 수 있는지 확인하십시오. 트러스가 그렇게 할 수 있다고 생각합니다.)하지만 많은 getdomainname 활동이 있습니다. 이상한 시작 지연을 조사 할 때 주요한 용의자. 이 상자에 잘못된 호스트 이름이 할당되어 있는지 확인하고/etc/hosts에서 기본 호스트 이름이 127.0.0.1로 확인되었는지 확인하십시오.

+0

내가 타임 스탬프를 추가 . 호스트는 문제가되지 않습니다. 127.0.0.1 루프백 로컬 호스트 # 루프백 (lo0) 이름/주소 192.168.62.117 서버 3 – culy

4

나는이 100 % 잘 모르겠지만, 적어도 가치가 시도의 : 64 비트 VM에서 IPv6를 사용하는 반면,

AIX에

는, 32 비트 자바 VM 기본 IP 프로토콜로 IPv4를 사용합니다. 운영 체제에서 IPv6을 사용할 수 있지만 잘못 구성된 경우 64 비트 VM이 네트워크 시간 초과를 실제로 기다리는 다른 지점에서 중단 된 것처럼 보일 수 있습니다. 이것은 트러스와 분석 결과가 일치하는 것 같습니다.

java 명령에 다음 옵션을 추가하여 선호하는 네트워크 스택으로 IPv4를 사용하여 64 비트 VM을 시작하려고 할 수 있습니다

:를 -Djava.net.preferIPv4Stack = 사실

+0

시도했지만 작동하지 않습니다. – culy

+1

시작할 때 QUIT 신호 (kill -QUIT )를 보내 VM에서 스레드 덤프를 가져올 수 있습니까? 그렇다면 VM이 걸려있는 스레드 덤프에서 분명합니다. – jarnbjo

+0

예, 나는 코어 덤프를 얻을 수 있습니다. 0x9000000002632d8에서 sem_wait에서 종료하십시오. 0x9000000002632d8 (sem_wait + 0x98) e8410028 ld r2,0x28 (r1) – culy