【问题标题】:The java application feign death. Jstack can make application recovery?java应用程序装死。 Jstack可以使应用程序恢复吗?
【发布时间】:2015-10-12 11:43:46
【问题描述】:

今天发现我的应用程序无法访问,然后登录我的服务器,发现应用程序的线程正常,但是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的结果是runnable thread都是GC线程,比如"Gang worker#4 (Parallel GC Threads)" os_prio=0 tid=0x00007f5f10021800 nid=0x6477 runnable

这是我的 JAVA_OPTIONS

-服务器 -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

【问题讨论】:

  • jstack 不太可能修复任何问题。更有可能是您的 JVM 花费了很长时间来执行完整的 GC,并且在您运行 jstack 时完成了。只是巧合。
  • s/ling/long/p .... (ed)
  • 这不是您在stackoverflow.com/q/33049375/1362755 中已经提出的问题吗?
  • @StephenC,不是巧合,每次。寻求帮助。
  • @the8472,sorry,没有人给出正确答案,顺便问下一个问题。

标签: java garbage-collection jstack


【解决方案1】:

有一个影响 Linux 内核 3.14 - 3.18 的新错误

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

您可以在this post by Gil Tene找到更多详细信息

【讨论】:

  • 我已经在我在 cmets 中链接的问题中提供了相同的答案。 OP 说提供的答案不是“正确的”
  • 谢谢,但是我的linux内核版本是2.6.32-504.el6.x86_64,可能是bug的原因??
  • centos 版本为CentOS release 6.7 (Final)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多