JVM在GCTaskThread上崩溃

时间:2016-07-13 18:37:36

标签: java garbage-collection jvm

我面临着JVM的一个奇怪问题,我在tomcat上部署了我的Rest Service应用程序,但现在有时JVM会随机崩溃,有时会在3小时后崩溃,有时在20小时后崩溃,有时需要数天。我在想有关内存堆的应用程序出了问题,也许应用程序正在导致一个“停止世界”#34;几次直到GC失败或什么的。 (不是该主题的专家)。

你认为是一个相关的代码问题(性能问题可能)或可能是JVM上的潜在错误,我已经阅读了几个博客和oracle论坛,有些人只是说要升级JVM。

感谢您的帮助。

JVM Args:

  • -Xms1024M
  • -Xmx4098M
  • -XX:MaxPermSize = 512M
  • -XX:+ UseConcMarkSweepGC
  • -XX:+ CMSIncrementalMode
  • -XX:MaxGCPauseMillis = 1200
  • -XX:ParallelGCThreads = 8

机器: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)

1 个答案:

答案 0 :(得分:1)

一对建议:

  1. 将您的java升级到最新版本。他们确实修复了很多错误。如果可能,请升级到最新的jdk8,目前为8u92。如果没有,请使用最新的jdk7,7u80
  2. CMSIncrementalMode在最近的java版本中已被弃用。因此,您也可以尝试删除此选项。
  3. 在具有8个内核且只有4G堆的CPU上,您可以通过删除-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:MaxGCPauseMillis=1200 -XX:ParallelGCThreads=8选项来尝试使用ParallelGC。并行GC更简单,更强大。