2009년 7월 15일 수요일

CompilerThread Crash

[발생로그]#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# SIGSEGV (11) at pc=c82f1ef0, pid=28276, tid=13
#
# Java VM: Java HotSpot(TM) Server VM (1.5.0.15 jinteg:01.12.09-07:54 PA2.0 (aCC_AP) mixed mode)
# Problematic frame:
# V [libjvm.sl+0xaf1ef0]
#

--------------- T H R E A D ---------------

Current thread (0030a7a8): JavaThread "CompilerThread1" daemon [_thread_in_native, id=13, lwp_id=217782]

siginfo:si_signo=11, si_errno=0, si_code=0, si_addr=00000004

Registers:
r1: 095cac20 rp: 00000000 r3: 09a31bdc r4: 44c50848
r5: 44c50858 r6: 09a317ac r7: 09a30960 r8: 00000000
r9: 44c50880 r10: 09a31bdc r11: 00000018 r12: 09874130
r13: 00000018 r14: 0000004d r15: 49601858 r16: 00000000
r17: 00000000 r18: 00000000 r19: a7e81b00 r20: 00000800
r21: 00000800 r22: 095cac20 r23: 00000000 r24: 095ccc20
r25: 00000800 r26: 00000800 dp: 00012cd0 ret0: 00000000
ret1: 00000011 sp: 44c50ec0 r31: 095ce5c0
Stack pointer: (sp=44c50ec0)
44c50ea0: a7e81b00 00000000 c82f1beb c82f1e77
44c50eb0: 44c507cc 00000000 00130150 03f62bf8
Instructions: (pc=c82f1ef0)
c82f1ed0: e81f1df5 0ec31280 80dc2160 37870000
c82f1ee0: 489f00b0 4b820038 4b970038 0fe2209c
c82f1ef0: 4b980008 4b190000 88192060 08000240

Stack: [44b4f000,44c4f000), sp=44c50ec0, free space=1031k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.sl+0xaf1ef0]


Current CompileTask:
opto:109% org.springframework.aop.framework.JdkDynamicAopProxy.findDefinedEqualsAndHashCodeMethods([Ljava/lang/Class;)V @ 21 (90 bytes)


--------------- P R O C E S S ---------------

Java Threads: ( => current thread )
03c406d8 JavaThread "[STANDBY] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon [_thread_blocked, id=72, lwp_id=218010]
049a2df8 JavaThread "DynamicListenThread[Default]" daemon [_thread_in_native, id=71, lwp_id=218009]
049a2c48 JavaThread "weblogic.GCMonitor" daemon [_thread_blocked, id=70, lwp_id=218008]
009e41e8 JavaThread "[STANDBY] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon [_thread_blocked, id=69, lwp_id=218007]
026dc968 JavaThread "JCO.TimeoutChecker" daemon [_thread_blocked, id=68, lwp_id=217992]
03c40528 JavaThread "[STANDBY] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon [_thread_blocked, id=67, lwp_id=217963]
049a2a98 JavaThread "weblogic.cluster.MessageReceiver" daemon [_thread_in_native, id=66, lwp_id=217962]
009e48a8 JavaThread "Echo Server Thread" daemon [_thread_in_native, id=65, lwp_id=217961]
04960018 JavaThread "Prototyper" daemon [_thread_blocked, id=64, lwp_id=217959]
009e46f8 JavaThread "HouseKeeper" daemon [_thread_blocked, id=63, lwp_id=217958]
009e4548 JavaThread "Thread-21" daemon [_thread_blocked, id=62, lwp_id=217957]
009e4398 JavaThread "Thread-20" daemon [_thread_blocked, id=61, lwp_id=217956]
009e3cd8 JavaThread "Timer-2" daemon [_thread_blocked, id=58, lwp_id=217939]
009e3b28 JavaThread "DefaultQuartzScheduler_QuartzSchedulerThread" [_thread_blocked, id=57, lwp_id=217933]
009e3978 JavaThread "DefaultQuartzScheduler_Worker-9" [_thread_blocked, id=56, lwp_id=217932]
009e37c8 JavaThread "DefaultQuartzScheduler_Worker-8" [_thread_blocked, id=55, lwp_id=217931]
009e3618 JavaThread "DefaultQuartzScheduler_Worker-7" [_thread_in_Java, id=54, lwp_id=217930]
009e3468 JavaThread "DefaultQuartzScheduler_Worker-6" [_thread_blocked, id=53, lwp_id=217929]
009e32b8 JavaThread "DefaultQuartzScheduler_Worker-5" [_thread_blocked, id=52, lwp_id=217928]
009e3108 JavaThread "DefaultQuartzScheduler_Worker-4" [_thread_blocked, id=51, lwp_id=217927]
009e2f58 JavaThread "DefaultQuartzScheduler_Worker-3" [_thread_blocked, id=50, lwp_id=217926]
009e2da8 JavaThread "DefaultQuartzScheduler_Worker-2" [_thread_blocked, id=49, lwp_id=217925]
009e2bf8 JavaThread "DefaultQuartzScheduler_Worker-1" [_thread_blocked, id=48, lwp_id=217924]
009e2a48 JavaThread "DefaultQuartzScheduler_Worker-0" [_thread_blocked, id=47, lwp_id=217923]
03c40378 JavaThread "[STANDBY] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon [_thread_blocked, id=46, lwp_id=217877]
03c401c8 JavaThread "[STANDBY] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon [_thread_blocked, id=45, lwp_id=217876]
009e1e78 JavaThread "TcpAgentWorker-4" daemon [_thread_blocked, id=44, lwp_id=217872]
009e1cc8 JavaThread "TcpAgentWorker-3" daemon [_thread_blocked, id=43, lwp_id=217871]
009e1b18 JavaThread "TcpAgentWorker-2" daemon [_thread_blocked, id=42, lwp_id=217870]
009e1968 JavaThread "TcpAgentWorker-1" daemon [_thread_blocked, id=41, lwp_id=217869]
009e17b8 JavaThread "TcpAgentWorker-0" daemon [_thread_blocked, id=40, lwp_id=217868]
026dbbe8 JavaThread "CommonTimer" daemon [_thread_blocked, id=39, lwp_id=217867]
009e1608 JavaThread "AgentDataCollector" daemon [_thread_blocked, id=38, lwp_id=217866]
009e1458 JavaThread "DumpThread" daemon [_thread_blocked, id=37, lwp_id=217865]
009e12a8 JavaThread "TcpSocketAgent" daemon [_thread_in_native, id=36, lwp_id=217864]
009e10f8 JavaThread "Thread-12" daemon [_thread_blocked, id=35, lwp_id=217863]
009e0f48 JavaThread "Thread-11" daemon [_thread_blocked, id=34, lwp_id=217848]
03cc01e8 JavaThread "DoSManager" daemon [_thread_blocked, id=33, lwp_id=217810]
009e0be8 JavaThread "VDE Transaction Processor Thread" daemon [_thread_blocked, id=31, lwp_id=217808]
009e0a38 JavaThread "ExecuteThread: '4' for queue: 'weblogic.socket.Muxer'" daemon [_thread_blocked, id=30, lwp_id=217807]
009e0888 JavaThread "ExecuteThread: '3' for queue: 'weblogic.socket.Muxer'" daemon [_thread_blocked, id=29, lwp_id=217806]
009e06d8 JavaThread "ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'" daemon [_thread_blocked, id=28, lwp_id=217805]
009e0528 JavaThread "ExecuteThread: '1' for queue: 'weblogic.socket.Muxer'" daemon [_thread_in_native, id=27, lwp_id=217804]
009e0378 JavaThread "ExecuteThread: '0' for queue: 'weblogic.socket.Muxer'" daemon [_thread_blocked, id=26, lwp_id=217803]
03c40018 JavaThread "[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon [_thread_blocked, id=25, lwp_id=217802]
009e01c8 JavaThread "Thread-7" daemon [_thread_blocked, id=24, lwp_id=217801]
000ae5e8 JavaThread "weblogic.timers.TimerThread" daemon [_thread_blocked, id=23, lwp_id=217800]
000ae438 JavaThread "weblogic.time.TimeEventGenerator" daemon [_thread_blocked, id=22, lwp_id=217799]
000ae288 JavaThread "[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon [_thread_blocked, id=21, lwp_id=217798]
000ae0d8 JavaThread "Timer-1" daemon [_thread_blocked, id=20, lwp_id=217797]
000adf28 JavaThread "SeedGenerator Thread" daemon [_thread_blocked, id=19, lwp_id=217790]
000add78 JavaThread "Noisy Thread" daemon [_thread_blocked, id=18, lwp_id=217789]
000adbc8 JavaThread "Timer-0" daemon [_thread_blocked, id=17, lwp_id=217786]
000ad6b8 JavaThread "Jennifer_class_dump" daemon [_thread_blocked, id=16, lwp_id=217785]
000ad358 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=15, lwp_id=217784]
=>0030a7a8 JavaThread "CompilerThread1" daemon [_thread_in_native, id=13, lwp_id=217782]
0030a5c0 JavaThread "CompilerThread0" daemon [_thread_in_native, id=12, lwp_id=217781]
0030a3d8 JavaThread "AdapterThread" daemon [_thread_blocked, id=11, lwp_id=217780]
000ad1a8 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=10, lwp_id=217779]
000acff8 JavaThread "Finalizer" daemon [_thread_blocked, id=9, lwp_id=217778]
000ace48 JavaThread "Reference Handler" daemon [_thread_blocked, id=8, lwp_id=217777]
000acc98 JavaThread "main" [_thread_blocked, id=1, lwp_id=217759]

Other Threads:
001f30e0 VMThread [id=7, lwp_id=217776]
001f3198 WatcherThread [id=14, lwp_id=217783]

VM state: not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
PSYoungGen total 303360K, used 207161K [90400000, a5750000, a5950000)
eden space 258688K, 76% used [90400000,9c48c0f8,a00a0000)
from space 44672K, 22% used [a00a0000,a0a6a718,a2c40000)
to space 43840K, 0% used [a2c80000,a2c80000,a5750000)
PSOldGen total 699072K, used 83201K [65800000, 902b0000, 902b0000)
object space 699072K, 11% used [65800000,6a9405a0,902b0000)
PSPermGen total 524288K, used 92249K [45800000, 65800000, 65800000)
object space 524288K, 17% used [45800000,4b216680,65800000)

Dynamic libraries:
/opt/java1.5/bin/PA_RISC2.0/java
text:0x00001000-0x00010d5c data:0x00011000-0x00012f58
/opt/java1.5/jre/lib/PA_RISC2.0/server/libjvm.sl
text:0xc7800000-0xc8634000 data:0xa7e6b000-0xa80d1000
/usr/lib/libpthread.1
text:0xc0050000-0xc0069000 data:0xa7e2c000-0xa7e2f000
/usr/lib/libm.2
text:0xc00a0000-0xc00cc000 data:0xa7e2f000-0xa7e30000
/usr/lib/librt.2
text:0xc00cc000-0xc00d0000 data:0xa7e30000-0xa7e31000
/usr/lib/libcl.2
text:0xc0500000-0xc0691000 data:0xa7e34000-0xa7e5a000
/usr/lib/libisamstub.1
text:0xc009c000-0xc009d000 data:0xa7e31000-0xa7e32000
/usr/lib/libCsup.2
text:0xc04a0000-0xc04bc000 data:0xa7e5a000-0xa7e5d000
/usr/lib/libc.2
text:0xc0100000-0xc024b000 data:0xa80d6000-0xa80e9000
/usr/lib/libdld.2
text:0xc0004000-0xc0007000 data:0xa80d1000-0xa80d2000
/opt/java1.5/jre/lib/PA_RISC2.0/native_threads/libhpi.sl
text:0xc1d80000-0xc1d91000 data:0xa7e27000-0xa7e29000
/opt/java1.5/jre/lib/PA_RISC2.0/libinstrument.sl
text:0xc4660000-0xc4671000 data:0xa7e23000-0xa7e25000
/usr/lib/libnss_files.1
text:0xc006c000-0xc0075000 data:0xa7e22000-0xa7e23000
/opt/java1.5/jre/lib/PA_RISC2.0/libverify.sl
text:0xc1e90000-0xc1e9d000 data:0xa7da0000-0xa7da1000
/opt/java1.5/jre/lib/PA_RISC2.0/libjava.sl
text:0xc2310000-0xc233e000 data:0xa7d9e000-0xa7da0000
/opt/java1.5/jre/lib/PA_RISC2.0/libzip.sl
text:0xc23e0000-0xc23f4000 data:0xa7d9a000-0xa7d9c000
/usr/lib/nls/loc/locales.2/ko_KR.eucKR
text:0xc000d000-0xc0010000 data:0x44fd3000-0x450fa000
/usr/lib/nls/loc/methods.2/libHP15.sl
text:0xc0045000-0xc0047000 data:0xa7c19000-0xa7c1a000
/opt/java1.5/jre/lib/PA_RISC2.0/libnet.sl
text:0xc4410000-0xc4423000 data:0xa7c18000-0xa7c19000
/opt/java1.5/jre/lib/PA_RISC2.0/libnio.sl
text:0xc1d94000-0xc1d9c000 data:0xa7c15000-0xa7c16000
/opt/java1.5/jre/lib/PA_RISC2.0/libmanagement.sl
text:0xc1e28000-0xc1e2f000 data:0xa7c14000-0xa7c15000
/data1/plm/weblogic/wlserver_10.0/server/native/hpux11/PA_RISC/libwlfileio2.sl
text:0xc0d2d000-0xc0d30000 data:0xa7c13000-0xa7c14000
/data1/plm/weblogic/wlserver_10.0/server/native/hpux11/PA_RISC/libmuxer.sl
text:0xc0ecc000-0xc0ed0000 data:0xa7c12000-0xa7c13000
/data1/plm/weblogic/wlserver_10.0/server/native/hpux11/PA_RISC/libjennifer20.sl
text:0xc0d7d000-0xc0d80000 data:0xa7c11000-0xa7c12000
/data1/plm/weblogic/wlserver_10.0/server/native/hpux11/PA_RISC/libsapjcorfc.sl
text:0xc9100000-0xc94a7000 data:0xa7c0d000-0xa7c11000
/data1/plm/weblogic/wlserver_10.0/server/native/hpux11/PA_RISC/librfccm.sl
text:0xcc400000-0xcc865000 data:0x42f66000-0x43099000
/usr/lib/libnsl.1
text:0xc0280000-0xc030f000 data:0xa5999000-0xa59a6000
/usr/lib/libxti.2
text:0xc00d0000-0xc00e8000 data:0xa5992000-0xa5995000
/usr/lib/libstream.2
text:0xc06a0000-0xc06c8000 data:0xa59a6000-0xa59a9000
/usr/lib/libstd.2
text:0xc04c0000-0xc04ff000 data:0xa7c02000-0xa7c05000
/usr/lib/libsec.2
text:0xc0080000-0xc0099000 data:0xa7c09000-0xa7c0d000

VM Arguments:
jvm_args: -D75_plmsvr2 -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m -Xverbosegc -Xbootclasspath/p:/data1/plm/jennifer/agent/lwst.boot.jar:/data1/plm/jennifer/agent/lwst.jdk.jar -Djennifer.config=/data1/plm/jennifer/agent/p52.conf -javaagent:/data1/plm/jennifer/agent/lwst.javaagent.jar -da -Dplatform.home=/data1/plm/weblogic/wlserver_10.0 -Dwls.home=/data1/plm/weblogic/wlserver_10.0/server -Dweblogic.home=/data1/plm/weblogic/wlserver_10.0/server -Dwli.home=/data1/plm/weblogic/wlserver_10.0/integration -Dweblogic.management.discover=false -Dweblogic.management.server=t3://166.79.63.74:7001 -Dwlw.iterativeDev=false -Dwlw.testConsole=false -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/data1/plm/weblogic/patch_wls1001/profiles/default/sysext_manifest_classpath -XX:+HeapDumpOnCtrlBreak -XX:+HeapDumpOnOutOfMemoryError -Dweblogic.Name=75_plmsvr2 -Djava.security.policy=/data1/plm/weblogic/wlserver_10.0/server/lib/weblogic.policy
java_command: weblogic.Server
Launcher Type: generic

Environment Variables:
JAVA_HOME=/opt/java1.5
CLASSPATH=/data1/plm/jennifer/agent/jennifer.jar:/data1/plm/weblogic/application/myplm/WEB-INF/lib/sapjco.jar::/data1/plm/weblogic/patch_wls1001/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/opt/java1.5/lib/tools.jar:/data1/plm/weblogic/wlserver_10.0/server/lib/weblogic_sp.jar:/data1/plm/weblogic/wlserver_10.0/server/lib/weblogic.jar:/data1/plm/weblogic/modules/features/weblogic.server.modules_10.0.1.0.jar:/data1/plm/weblogic/modules/features/com.bea.cie.common-plugin.launch_2.1.2.0.jar:/data1/plm/weblogic/wlserver_10.0/server/lib/webservices.jar:/data1/plm/weblogic/modules/org.apache.ant_1.6.5/lib/ant-all.jar:/data1/plm/weblogic/modules/net.sf.antcontrib_1.0b2.0/lib/ant-contrib.jar::/data1/plm/weblogic/wlserver_10.0/common/eval/pointbase/lib/pbclient51.jar:/data1/plm/weblogic/wlserver_10.0/server/lib/xqrl.jar::
PATH=/data1/plm/weblogic/wlserver_10.0/server/bin:/data1/plm/weblogic/modules/org.apache.ant_1.6.5/bin:/opt/java1.5/jre/bin:/opt/java1.5/bin:/opt/java1.5/bin:/usr/bin:/opt/ansic/bin:/usr/ccs/bin:/usr/contrib/bin:/opt/hparray/bin:/opt/nettladm/bin:/opt/upgrade/bin:/opt/fcms/bin:/opt/pd/bin:/usr/bin/X11:/usr/contrib/bin/X11:/opt/resmon/bin:/opt/perf/bin:/opt/prm/bin:/opt/aCC/bin:/opt/gnome/bin:/opt/ignite/bin:/opt/mozilla:/opt/wbem/bin:/opt/wbem/sbin:/opt/hpsmh/bin:/opt/perl/bin:/opt/ssh/bin:/opt/langtools/bin:/opt/imake/bin:/opt/gwlm/bin:/usr/sbin/diag/contrib:/opt/graphics/common/bin:.:/data1/oracle9i/bin:/bin:/usr/bin:/sbin:/data1/oracle9i/sds:/usr/ccs/bin:/data1/plm/weblogic/user_projects/domains/plmDomain:/data1/plm/weblogic/user_projects/domains/plmDomain/bin/:
LD_LIBRARY_PATH=/data1/oracle9i/lib64:/data1/oracle9i/network/lib:/usr/lib:/lib:/data1/plm/weblogic/application/myplm/WEB-INF/lib:
SHELL=/usr/bin/ksh
SHLIB_PATH=/opt/java1.5/jre/lib/PA_RISC2.0:/opt/java1.5/jre/lib/PA_RISC2.0/server:/opt/java1.5/jre/../lib/PA_RISC2.0::/usr/lib:/lib:/usr/ccs/lib:/data1/plm/weblogic/application/myplm/WEB-INF/lib::/data1/plm/weblogic/wlserver_10.0/server/native/hpux11/PA_RISC:/data1/plm/weblogic/wlserver_10.0/server/native/hpux11/PA_RISC/oci920_8

Signal Handlers:
SIGSEGV: [libjvm.sl+0x3db12], sa_mask[0]=0xff7ffeff, sa_flags=0x00000051
SIGBUS : [libjvm.sl+0x3db12], sa_mask[0]=0xff7ffeff, sa_flags=0x00000051
SIGFPE : [libjvm.sl+0x3db12], sa_mask[0]=0xff7ffeff, sa_flags=0x00000050
SIGPIPE: SIG_IGN, sa_mask[0]=0xff7ffeff, sa_flags=0x00000050
SIGILL : [libjvm.sl+0x3db12], sa_mask[0]=0xff7ffeff, sa_flags=0x00000051
SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000004
SIGUSR2: [libjvm.sl+0x3aa2a], sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGHUP : SIG_IGN, sa_mask[0]=0x00000000, sa_flags=0x00000004
SIGINT : SIG_IGN, sa_mask[0]=0x00000000, sa_flags=0x00000004
SIGQUIT: [libjvm.sl+0x3db0a], sa_mask[0]=0xff7ffeff, sa_flags=0x00000040
SIGTERM: [libjvm.sl+0x3db0a], sa_mask[0]=0xff7ffeff, sa_flags=0x00000040


--------------- S Y S T E M ---------------

OS:HP-UX
uname:HP-UX B.11.11 U 9000/800
rlimit: STACK 392192k, CORE 2097151k, NOFILE 8192, AS infinity
load average:0.16 0.18 0.22

CPU:total 4

Memory: 4k page, physical 12555264k(1189556k free)

vm_info: Java HotSpot(TM) Server VM ("jinteg:01.12.09-07:54") for hp-ux-pa-risc, built on Jan 12 2009 11:05:56 by jinteg with aCC




[발생원인]

JVM의 Hotspot(JIT) Compiler 버그로 판단됨.
Current thread (0030a7a8): JavaThread "CompilerThread1" daemon

위 로그내용을 보면 CompilerThread1에서 발생된 사항입니다. CompilerThread deadlock 으로 인한 crash입니다.
Sun Hotspot JVM에서 Hotspot Compiler 기능을 담당하는 Thread가 CompilerThread 입니다.
CompilerThread 는 Java Bytecode를 최적화(Optimization)하는 역할로 성능의 최적화를 위하여 제공합니다.
간혹 Hotspot Compiler의 버그로 인해 JVM이 Crash되는 경우가 발생되는데 해당사항도 같은 내용으로 발생된 현상입니다.
로그내용을 보면 JVM Hotspot Compiler컴파일러 버그로 보시면 됩니다.

Fatal Error Log내용을 보면 아래와 같습니다.
Current CompileTask:
opto:109% org.springframework.aop.framework.JdkDynamicAopProxy.findDefinedEqualsAndHashCodeMethods([Ljava/lang/Class;)V @ 21 (90 bytes)

이는 org.springframework.aop.framework.JdkDynamicAopProxy.findDefinedEqualsAndHashCodeMethods메소드를 최적화하는 과정에서 Crash가 발생했음을 의미합니다.

[조치방법]

해당 메소드를 Hotspot Compiler로 컴파일 되지 않게 제외시켜 주어야 하겠습니다.

우선은 아래와 같은 방법으로 해당메소드의 compile시 제외할 수 있도록 조치가 필요하겠습니다.
1. .hotsopt_compiler 파일생성(임의의 디렉토리에 설정하여도 됨 – 예)서는 ${DOMAIN_HOME}/bin에 생성함)
2. . hotsopt_compiler 파일내용
--------------------------
exclude org.springframework.aop.framework.JdkDynamicAopProxy findDefinedEqualsAndHashCodeMethods
============================
3. –XX:CompilerCommandFile 옵션을 Java Option에 추가
예) –XX:CompilerCommandFile=${DOMIAN_HOME}/bin/.hotsopt_compiler
4. WAS Instace를 재기동하여 줌.

위와같이 적용하여 해당 메소드는 Hotspot compile이 일어나지 않도록 해주는 방법으로 조치되어야 하겠습니다.

참고로 다른 방법은
1. 관련된 Hotspot Compiler버그를 제거한 JVM Version으로 upgrade하거나 downgrade를 하여야 하는 사항인데 이러한 내용에 대한 명확한 fix내용이 나와있지는 않습니다.
2. Client VM 설정 (-client 옵션적용) -> 성능저하 발생.
3. JIT Compiler 대신 Interpreter 모드(-Xint)를 사용 : 성능 저하 현상발생

아래는
Hotspot Compiler버그 관련한 workaround 참고 url 들 입니다.
http://jira.atlassian.com/browse/JRA-9198?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel
http://forums.sun.com/thread.jspa?threadID=691320&tstart=1
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6355639
http://forums.sun.com/thread.jspa?threadID=5366710

2009년 5월 28일 목요일

WebLogic WLST 사용 stop 시 error

Weblogic10에서 stop시 error가 아래 에러 발생

*sys-package-mgr*: can't write cache file for '/opt/java1.5/lib/tools.jar'
*sys-package-mgr*: can't write cache file for --

WLST를 사용할 경우 CLASSPATH에 잡혀있는 jar파일들을 Cache에 풀어주는 과정이 있는데 이 과정에서 디렉토리 권한이 없어 발생되는 현상입니다.

조치는 stopWebLogic.sh 파일의 내용에 아래 사항을 추가해 주시기 바랍니다.
별도 사용권한이 있는 디렉토리가 있으면 해당 디렉토리를 지정해 주시면 되고,
아래 내용은 /tmp 를 사용할 수 있도록 설정한 예입니다.
설정방법 아래 옵션을 WLST 실행시 추가해 주면 됩니다.
추가사항 : -Dpython.cachedir=/tmp

[조치필요사항]
{도메인}/bin/stopWebLogic.sh의 내용 부분을 아래와 같이 수정함.
------- 수정 전 -------
${JAVA_HOME}/bin/java ${JAVA_OPTIONS} weblogic.WLST shutdown.py 2>&1
------- 수정 후 -------
${JAVA_HOME}/bin/java -Dpython.cachedir=/tmp ${JAVA_OPTIONS} weblogic.WLST shutdown.py 2>&1

2009년 4월 26일 일요일

was 커널권장

[HP-UX 11i V2]
Recommended Kernel Parameter Settings
 BEA recommends that you set the maxdsiz kernel parameter to a minimum value of 2 GB.
 On HP-UX 11 systems, the default value for maximum threads per process is 64. This value may be too low for WebLogic Server and many Java server applications: WebLogic Server may have problems starting up. Therefore, BEA recommends that you use the maximum kernel setting for the max_thread_proc parameter: 1024.
 BEA recommends that you set all the parameters listed in the following table to the "New Value" specified for each.
Parameter Recommended Value Description
max_thread_proc 1024 Maximum threads per process
maxfiles 256 Soft file limit per process
nkthread 3635 Number of threads total on the system
nproc 2068 Maximum number of processes


[Sun Solaris 10]

1. Suggested TCP-Related Parameter Values

Parameter Suggested Value
/dev/tcp tcp_time_wait_interval 60000
/dev/tcp tcp_conn_req_max_q 16384
/dev/tcp tcp_conn_req_max_q0 16384
/dev/tcp tcp_ip_abort_interval 60000
/dev/tcp tcp_keepalive_interval 7200000
/dev/tcp tcp_rexmit_interval_initial 4000
/dev/tcp tcp_rexmit_interval_max 10000
/dev/tcp tcp_rexmit_interval_min 3000
/dev/tcp tcp_smallest_anon_port 32768
/dev/tcp tcp_xmit_hiwat 131072
/dev/tcp tcp_recv_hiwat 131072
/dev/tcp tcp_naglim_def 1
/dev/ce instance 0
/dev/ce rx_intr_time 32
Note: Prior to Solaris 2.7, the tcp_time_wait_interval parameter was called tcp_close_wait_interval. This parameter determines the time interval that a TCP socket is kept alive after issuing a close call. The default value of this parameter on Solaris is four minutes. When many clients connect for a short period of time, holding these socket resources can have a significant negative impact on performance. Setting this parameter to a value of 60000 (60 seconds) has shown a significant throughput enhancement when running benchmark JSP tests on Solaris. You might want to reduce this setting further if the server gets backed up with a queue of half-opened connections.
Tip: Use the netstat -s -P tcp command to view all available TCP parameters

2. Suggested /etc/system Values

Parameter Suggested Value
set rlim_fd_cur 8192
set rlim_fd_max 8192
set tcp:tcp_conn_hash_size 32768
set shmsys:shminfo_shmmax
Note: This should only be set for machines that have at least 4 GB RAM or higher. 4294967295
set autoup 900
set tune_t_fsflushr 1

3. Suggested CE Gigabit Card Values

Parameter Suggested Value
set ce:ce_bcopy_thresh 256
set ce:ce_dvma_thresh 256
set ce:ce_taskq_disable 1
set ce:ce_ring_size 256
set ce:ce_comp_ring_size 1024
set ce:ce_tx_ring_size 4096


[AIX 5.3]

Parameter Recommended Value
file descriptor 1024 - 8192
udp_sendspace 65536 이상
udp_recvspace 65536 이상
tcp_sendspace 65536 이상
tcp_recvspace 65536 이상
tcp_finwait2 30 - 120(15 ~ 60초)
tcp_keepidle 150 - 1200
somaxconn 4096이상

2009년 3월 19일 목요일

JVM Heap Dump를 생성하기 위한 옵션정리

1. Sun JDK

1) HPRof 사용

JDK 버전에 따라 JVM 옵션에 -Xrunhprof:heap=dump,format=b,doe=n (JDK 1.4) 또는 -agentlib:hprof=heap=dump,format=b,doe=n (JDK 1.5)을 명시하고, 실행시에 Control-break 또는 kill -3 명령으로 heap dump를 생성할 수 있다.
Windows 환경이라면 SendSignal.exe를 사용하면 된다.
하지만 오버헤드가 너무 커서 운영환경에서 사용하기에는 무리가 따른다. 이 옵션없이 WAS를 기동하면 30초면 뜨는데, 옵션을 설정하면 무려 3분 30초가 걸렸다.

* 설정
- -Xrunhprof:heap=dump,format=b,doe=n (JDK 1.4)
- -agentlib:hprof=heap=dump,format=b,doe=n (JDK 1.5)
* heap dump 생성
- kill -3
- SendSignal.exe

2) OutOfMemoryError 발생 시 자동으로 heap dump

JVM 옵션에 -XX:+HeapDumpOnOutOfMemoryError를 설정하면 OutOfMemoryError 발생 시에 heap dump를 현재 실행 디렉터리에 생성한다. JBoss의 경우는 $JBOSS_HOME/bin 디렉터리이다. heap dump가 생성되는 경로를 지정하려면 -XX:HeapDumpPath를 설정해준다.
Sun JDK 1.4.2_12, 1.5.0_7, 그리고 HP 1.4.2_11 이후 버전에서 지원된다.

* 설정
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:HeapDumpPath=/path

* heap dump 생성
- OutOfMemoryError 발생시

3) SIGQUIT (kill -3 )

JVM 옵션에 -XX:HeapDumpOnCtrlBreak를 설정하면 SIGQUIT signal로 heap dump를 생성할 수 있다. JDK 1.5.0_14 부터 지원된다. 하지만, Windows와 Linux 버전의 JDK 1.5.0_14는 버그로 인해 "/"가 포함된 파일명으로 heap dump를 생성하려고해 No such file or directory라는 에러를 내며 heap dump가 생성되지 않는다. Solaris 버전은 테스트를 못해봤는데 설마 동작하지 않을까 싶다.

* 설정
- -XX:HeapDumpOnCtrlBreak
* heap dump 생성
- kill -3
- SendSignal.exe

4) jmap 사용

별도로 JVM 옵션에 명시할 필요없이 JDK에 포함되어 있는 jmap을 사용해 heap dump를 생성할 수 있다. Windows 버전은 JDK 1.5 버전에 jmap이 포함되어 있지 않으므로 사용할 수 없다.

* heap dump 생성
- jmap -heap:format=b (JDK 1.5)
- jmap -dump:format=b,file= (JDK 6)

2009년 3월 4일 수요일

IBM-AIX JDK 1.5(SR7), 1.4(SR11) 에서 WebLogic socket leak 해결방법

발생내용
IBM JVM 1.5 SR7, 1.4 SR11에서는 동일 로직임에도 불구하고 hang up 현상이 발생합니다.

원인분석
일반적으로 java에서 close() signal이 발생을 하면, 기존 SR7 이전 버전에서는 native shutdown 루틴은 block되지 않기 때문에 hang up 현상이 발생하지 않았습니다.

하지만 IBM JVM 1.5 SR7, 1.4 SR11에서는 동일 로직임에도 불구하고 hang up 현상이 발생합니다.
타 OS와 비교 분석을 해보면,
일반적으로 다른 OS에서는 java에서 close() 호출 시, native poll에서 “POLLNVAL”이라는 event가 발생한 뒤, socket이 close되는 작업이 수행됩니다.
=========================
POLLNVAL : The specified fd value does not belong to an open file.
This flag is only valid in the revents member; it is not used in the events member.
=========================
하지만 AIX의 경우,
java에서 close를 이벤트로 인식하지 않는 것으로 보여집니다. 때문에 close() 호출 시, native poll에서 특정 이벤트가 발생하지 않고 wait()상태로 전이가 됩니다.

즉, 정리하자면, Java의 close() 후, socket 종료 루틴에 의해 fd를 lock합니다. 하지만 이미 이전에 해당 fd를 관리하는 poll에는 어떠한 이벤트를 발생하지 않기 때문에 hang up현상이 발생하는 것으로 보여집니다.

IBM Java1.5SR7에서 native IO 사용시 hang up이 발생하는 원인은 AIX에서의 java1.5 SR7에서 socket close()시 logic이 변경되어 발생하는 것으로 추정합니다.

UPDATE=======
이슈는 CR370915에서 진행되었던 내용으로,IBM의 AIX JVM 1.5 SR7의 경우 socket close시 hang 현상이 발생하는 문제입니다.
발생하는 경우는,Performance Pack(Native IO)이 on된 상태에서,socket에 대해 polling을 하는 도중에KeepAlive 시간이 경과하여 scheduler가 해당 socket을 close 하려 할 때hang이 되는 현상입니다.

thread dump를 보면 보통 다음과 같은 stack trace를 볼 수 있습니다.
=='[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)'' (TID:0x438F2000, sys_thread_t:0x438F9EF8, state:R, native ID:0x0037F035) prio=5
at java/net/PlainSocketImpl.socketClose0(Native Method)at java/net/PlainSocketImpl.socketPreClose(PlainSocketImpl.java:744(Compiled Code))
at java/net/PlainSocketImpl.close(PlainSocketImpl.java:568(Compiled Code))
at java/net/SocksSocketImpl.close(SocksSocketImpl.java:1049(Compiled Code))
at java/net/Socket.close(Socket.java:1341(Compiled Code))
at weblogic/socket/WeblogicSocket.close(WeblogicSocket.java:80(Compiled Code))
at weblogic/socket/SocketMuxer.closeSocket(SocketMuxer.java:449(Compiled Code))
at weblogic/socket/SocketMuxer.cancelIo(SocketMuxer.java:773)
at weblogic/socket/SocketMuxer$TimerListenerImpl.timerExpired(SocketMuxer.java:976(CompiledCode))
at weblogic/timers/internal/TimerImpl.run(TimerImpl.java:273(Compiled Code))
at weblogic/work/SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:464(CompiledCode))
at weblogic/work/ExecuteThread.execute(ExecuteThread.java:197(Compiled Code))
at weblogic/work/ExecuteThread.run(ExecuteThread.java:172(Compiled Code))
'ExecuteThread: '7' for queue: 'weblogic.socket.Muxer'' (TID:0x3511B500, sys_thread_t:0x34FAD6C8, state:R, native ID:0x003E80CB) prio=5
at weblogic/socket/PosixSocketMuxer.poll(Native Method)
at weblogic/socket/PosixSocketMuxer.processSockets(PosixSocketMuxer.java:102)
at weblogic/socket/SocketReaderRequest.run(SocketReaderRequest.java:29)
at weblogic/socket/SocketReaderRequest.execute(SocketReaderRequest.java:42)
at weblogic/kernel/ExecuteThread.execute(ExecuteThread.java:145)
at weblogic/kernel/ExecuteThread.run(ExecuteThread.java:117)
==타이밍 이슈로 IBM AIX 최신 JVM에서만 발생합니다.

WebLogic admin User / Password 재설정 방법

(1). 웹로직 Domain을 Stop시킵니다.
기존의 DefaultAuthenticatorInit.ldift 파일을 backup해둡니다.
파일위치
8.x : {$DOMAIN_HOME}
9.x : {$DOMAIN_HOME}/security/

(2). 도메인 디렉토리 내에 있는 boot.properties 파일을 열고 다음 부분을 수정합니다. (파일이 없을 경우 생성)
[파일위치]
8.x : {$DOMAIN_HOME}
9.x : {$DOMAIN_HOME} <= 없는경우 생성

username=adminuser
password=

(3). 도메인 내의 admin 서버 디렉토리명을 다음과 같이 변경해 줍니다. 다음과 같이 변경하지 않을 경우 서버가 시작되지 않습니다.
8.x : //
=> directory 를 orig 로 이름 변경
9.x : //servers
=> servers directory 를 servers.orig 로 이름 변경

(4). DefaultAuthenticatorInit.ldift 파일의 새로운 패스워드는 암호화가 안되므로 도메인 디렉토리 위치에서 다음의 명령어를 수행하여 패스워드를 보호해줍니다.

java weblogic.security.utils.AdminAccount
(사용예) java weblogic.security.utils.AdminAccount weblogic weblogic .


8.x :
1. {$DOMAIN_HOME}/bin 이동 후 . ./setDomainEnv.sh 실행
2. commnand 상태에서 java weblogic.security.utils.AdminAccount {변경 id} {변경 password} . 실행
3. 현재 디렉토리에 DefaultAuthenticatorInit.ldift 파일생성확인WebLogic admin id/pw change

9.x :
1. {$DOMAIN_HOME}/bin 이동 후 . ./setDomainEnv.sh 실행
2. commnand 상태에서 java weblogic.security.utils.AdminAccount {변경 id} {변경 password} . 실행
3. 현재 디렉토리에 DefaultAuthenticatorInit.ldift 생성확인
4. {$DOMAIN_HOME}/security 디렉토리로 이동 후 생성된 DefaultAuthenticatorInit.ldift 을 복사

(6) Start script 로 기동 후 기동결과 확인완료