java 应用程序假死。 Jstack可以让应用恢复吗?
The java application feign death. Jstack can make application recovery?
今天我发现我的应用程序无法accessed.Then我登录我的server.I发现应用程序线程正常,但是CPU负载太高
然后,我想用jstack
command.But它指出need -F option
。现在我发现GC日志留在[GC (Allocation Failure) 2015-10-10T10:18:10.564+0800: 71147.518: [ParNew:
,没有其他日志。
然后,我用jstack -F
command.Strange东西happened.The 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
有一个影响 Linux 内核 3.14 - 3.18
的新错误
症状,线程在阻塞同步原语时消耗 100%。发送信号(就像 jstack -F 那样)正在解决这种情况。
在 JVM 的情况下,如果 GC 线程受此影响,应用程序将永远停留在 STW 暂停。
中找到更多详细信息
今天我发现我的应用程序无法accessed.Then我登录我的server.I发现应用程序线程正常,但是CPU负载太高
然后,我想用jstack
command.But它指出need -F option
。现在我发现GC日志留在[GC (Allocation Failure) 2015-10-10T10:18:10.564+0800: 71147.518: [ParNew:
,没有其他日志。
然后,我用jstack -F
command.Strange东西happened.The 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
有一个影响 Linux 内核 3.14 - 3.18
的新错误症状,线程在阻塞同步原语时消耗 100%。发送信号(就像 jstack -F 那样)正在解决这种情况。 在 JVM 的情况下,如果 GC 线程受此影响,应用程序将永远停留在 STW 暂停。
中找到更多详细信息