java进程卡死问题
原文地址:
http://stackoverflow.com/questions/28739600/jvm-hang-and-kill-3-jmap-failed
tomcat进程出现了如下异常,并且卡在这个状态几天时间了:
- 所有线程都停止, 有一些连接停留在
SYNC_RECV
状态 kill -3
没有输出线程栈jmap
和jstack
无法正常工作sudo -u tomcat /usr/java/jdk1.6.0_45/bin/jmap -heap 19938 Attaching to process ID 19938, please wait... Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process sudo -u tomcat /usr/java/jdk1.6.0_45/bin/jmap -heap -F 19938 Attaching to process ID 19938, please wait... Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process
jstat -gc
的输出一直没有变化, 甚至连 timestamp 字段都不变sudo -u tomcat /usr/java/jdk1.6.0_45/bin/jstat -gc -t 19938 1000 5 Timestamp S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 370651.7 33408.0 33536.0 0.0 32416.0 3078592.0 2424720.7 6291456.0 74894.4 262144.0 71831.7 77 8.268 1 0.033 8.301 370651.7 33408.0 33536.0 0.0 32416.0 3078592.0 2424720.7 6291456.0 74894.4 262144.0 71831.7 77 8.268 1 0.033 8.301 370651.7 33408.0 33536.0 0.0 32416.0 3078592.0 2424720.7 6291456.0 74894.4 262144.0 71831.7 77 8.268 1 0.033 8.301 370651.7 33408.0 33536.0 0.0 32416.0 3078592.0 2424720.7 6291456.0 74894.4 262144.0 71831.7 77 8.268 1 0.033 8.301 370651.7 33408.0 33536.0 0.0 32416.0 3078592.0 2424720.7 6291456.0 74894.4 262144.0 71831.7 77 8.268 1 0.033 8.301
CPU一直很空闲
环境信息:
linux
Linux xxxx 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
jdk
java version "1.6.0_45" Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
JAVA_OPTS
-server -Xms9g -Xmx9g -Xss256k -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseParallelGC -XX:ParallelGCThreads=24 -XX:+UseParallelOldGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/tomcatdump -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/tmp/tomcatlog.log -XX:NewSize=3g -XX:MaxNewSize=3g -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
tomcat:
7.0.54
更新
SYN_RECV
状态应该是LVS导致的,初步猜测是LVS检测到tomcat异常后将流量切走,造成三次握手最后的ACK包没有到达这台服务器,连接卡在SYN_RECV
状态,但是这个应该对java进程没有影响才对
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
说实话,我看到的第一眼觉得是java被咔嚓了。。
然后我看到你后面好像可以访问到这个进程,那也许是java死了
好吧,开始说问题
请问os的配置是怎样的?
还有在发生这种情况时有过进程信息的详细信息记录吗?
jmap 和 jstack的版本和tomcat所用的是相同的吗?
你有使用类似visualvm,jconsole的工具来远程监控java吗?
还有就是这个问题总是能够复现吗?
我比较好奇这个问题,想帮你解决看看,当然是在能100%复现的基础上
tomcat进程在ps里状态是什么?或者tomcat进行最后一次活跃的时间是全部卡死的那个时间点吗。
感觉像被ctrl c又不输yes的感觉,都attach不上去了。
用jconsole挂上去然后等卡死看看吧。
不太好分析,jvm的配置有一些疑问。
xss现在默认都是1M了,你确定256k够吗?
不知道你什么应用要用并行收集器,一般情况下web应用都用CMS收集。
你需要dump出heap文件吗?那个文件很可能变的非常大。
gc的线程数是24?你的机器是24核的?