我面临着JVM的一个奇怪问题,我在tomcat上部署了我的Rest Service应用程序,但现在有时JVM会随机崩溃,有时会在3小时后崩溃,有时在20小时后崩溃,有时需要数天。我在想有关内存堆的应用程序出了问题,也许应用程序正在导致一个“停止世界”#34;几次直到GC失败或什么的。 (不是该主题的专家)。
你认为是一个相关的代码问题(性能问题可能)或可能是JVM上的潜在错误,我已经阅读了几个博客和oracle论坛,有些人只是说要升级JVM。
感谢您的帮助。
JVM Args:
机器:VM Intel(R)Xeon(R)CPU E5-2680 v3 @ 2.50GHz,带8核 - 32GB RAM内存。
这里是hs_err日志消息:
===================================================================
A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x00007f8182e7c841, pid=24461, tid=140194202347264
JRE version: Java(TM) SE Runtime Environment (7.0_55-b13) (build 1.7.0_55-b13)
Java VM: Java HotSpot(TM) 64-Bit Server VM (24.55-b03 mixed mode linux-amd64 compressed oops)
Problematic frame:
V [libjvm.so+0x46c841] CMSParRemarkTask::do_work_steal(int,Par_MarkRefsIntoAndScanClosure*, int*)+0x101<br/>
Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again<br/>
If you would like to submit a bug report, please visit:<br/>
http://bugreport.sun.com/bugreport/crash.jsp<br/>
--------------- T H R E A D ---------------
Current thread (0x00007f817c021000): GCTaskThread [stack: 0x00007f8181916000,0x00007f8181a17000] [id=24464]
siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x00000000af4ea190
Memory: 4k page, physical 49426864k(32696640k free), swap 2093052k(2089664k free)
vm_info: Java HotSpot(TM) 64-Bit Server VM (24.55-b03) for linux-amd64 JRE (1.7.0_55-b13), built on Mar 17 2014 19:43:58 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)
答案 0 :(得分:1)
一对建议:
CMSIncrementalMode
在最近的java版本中已被弃用。因此,您也可以尝试删除此选项。-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:MaxGCPauseMillis=1200 -XX:ParallelGCThreads=8
选项来尝试使用ParallelGC。并行GC更简单,更强大。