最近处理了一个故障,是关于jrockit虚拟机的一个BUG。
1、系统环境:
weblogic版本:923
主机/服务器: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
CPU数量: AMD Opteron QC/Phenom SSE SSE2 SSE3 EM64T( 4C)
内存: 4G
JDK版本: BEA JRockit(R) R27.4.0-90_CR358515-94243-1.5.0_12- 20080118-1154-linux-ia32
虚拟机启动参数:-Xms1536m -Xmx1536m -Xgc:parallel
2、 故障描述:
集群里的weblogic节点的状态有时候会变成admin状态,虽然登陆到console可以将其resume,但不能治本。domain目录下发现很多jrockit dump文件。
3、jrockit dump分析
查看java stack,可以看到问题是发生在代码优化的时候
"(Code Optimization Thread 1)" id=5 idx=0×24 tid=2616 lastJavaFrame=0xfffffffc
Stack 0: start=0xb6192000, end=0xb61b4000, guards=0xb6197000 (ok), forbidden=0xb6195000
Thread Stack Trace:
at irBBGetLoopHeader+32()@0xb7d88340
at optSSAStringAppend+511()@0xb7c9797f
at optmanOptimizeMIR+603()@0xb7dd93cb
at generateMethodWithStage+94()@0xb7cbcfae
at cmgrGenerateMethodFromPhase+215()@0xb7cbde97
at cmgrGenerateNormalMethod+87()@0xb7cbdf07
at cmgrGenerateCode+383()@0xb7cbe0bf
at generate_code2+937()@0xb7da29f9
at codegenThread+745()@0xb7da3989
at tsiCallStartFunction+30()@0xb7d7a90e
at tsiThreadStub+140()@0xb7d7ba9c
at ptiThreadStub+18()@0xb7dea5f2
at start_thread+203(pthread_create.c)@0x7f045b
at __clone+94()@0x747c4e
– Java stack –
4、故障结论
经查询,此问题属于jrockit的bug,JRockit在优化String的Append时可能会Crash,这是一个已知的问题。
5、解决办法
(1)Disabling Optimization (-Xnoopt) resolved the issue.
(2)前一种办法Disabling Optimization 会影响性能,最好还是升级虚拟机的版本.
(3)更换为sun的JDK。
jrockit新版本的下载地址:
http://www.oracle.com/technetwork/middleware/jrockit/downloads/index.html