java应用程序假装死亡。 Jstack可以进行应用程序恢复吗?

时间:2015-10-12 11:43:46

标签: java garbage-collection jstack

今天我发现无法访问我的应用程序。然后我登录服务器。我发现应用程序的线程正常,但CPU负载太高。

然后,我想使用jstack命令。但它指出need -F option。现在我发现GC日志保留在[GC (Allocation Failure) 2015-10-10T10:18:10.564+0800: 71147.518: [ParNew:,并且没有其他日志。

然后,我使用了jstack -F命令。发生了事情.CPU变得正常,我的服务器也变得正常了,GC日志也正常,第一行是[GC (Allocation Failure) 2015-10-10T10:17:50.757+0800: 53501.137: [ParNew: 210022K->245K(235968K), 369.6907808 secs] 400188K->1 90410K(1022400K), 369.6909604 secs] [Times: user=3475.15 sys=11.69, real=369.63 secs]。 jstack的结果的可运行线程都是GC线程,如"Gang worker#4 (Parallel GC Threads)" os_prio=0 tid=0x00007f5f10021800 nid=0x6477 runnable

这是我的JAVA_OPTIONS

  

-server -Dfile.encoding = UTF-8 \     -Xms2g -Xmx2g -Xmn512m \     -XX:+ UseParNewGC -XX:+ UseConcMarkSweepGC -XX:+ CMSParallelRemarkEnabled -XX:SurvivorRatio = 8 \     -XX:+ UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction = 75 \     -XX:+ PrintGCDateStamps -verbose:gc -XX:+ PrintGCDetails -Xloggc:/data/logs/gc-skynetlog_web.log \     -XX:+ UseGCLogFileRotation -XX:NumberOfGCLogFiles = 5 -XX:GCLogFileSize = 20M \     -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = / data / logs / dump_skynetlog_web.hprof

1 个答案:

答案 0 :(得分:0)

有一个影响Linux内核3.14 - 3.18

的新bug

症状,线程在阻塞同步原语时消耗100%。发送信号(如jstack -F确实)正在解决这种情况。 对于JVM,如果GC线程受此影响,应用程序将永远停留在STW暂停状态。

您可以在this post by Gil Tene

中找到更多详情