首页 > java进程卡死问题

java进程卡死问题

原文地址:
http://stackoverflow.com/questions/28739600/jvm-hang-and-kill-3-jmap-failed

tomcat进程出现了如下异常,并且卡在这个状态几天时间了:

  1. 所有线程都停止, 有一些连接停留在 SYNC_RECV 状态
  2. kill -3 没有输出线程栈
  3. jmapjstack 无法正常工作

    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
    
  4. 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
    
  5. CPU一直很空闲

环境信息:

  1. 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
    
  2. 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)
    
  3. 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
    
  4. tomcat:7.0.54

更新

SYN_RECV 状态应该是LVS导致的,初步猜测是LVS检测到tomcat异常后将流量切走,造成三次握手最后的ACK包没有到达这台服务器,连接卡在SYN_RECV状态,但是这个应该对java进程没有影响才对


说实话,我看到的第一眼觉得是java被咔嚓了。。
然后我看到你后面好像可以访问到这个进程,那也许是java死了

好吧,开始说问题
请问os的配置是怎样的?
还有在发生这种情况时有过进程信息的详细信息记录吗?
jmap 和 jstack的版本和tomcat所用的是相同的吗?
你有使用类似visualvm,jconsole的工具来远程监控java吗?
还有就是这个问题总是能够复现吗?
我比较好奇这个问题,想帮你解决看看,当然是在能100%复现的基础上


不太好分析,jvm的配置有一些疑问。
xss现在默认都是1M了,你确定256k够吗?
不知道你什么应用要用并行收集器,一般情况下web应用都用CMS收集。
你需要dump出heap文件吗?那个文件很可能变的非常大。
gc的线程数是24?你的机器是24核的?


tomcat进程在ps里状态是什么?或者tomcat进行最后一次活跃的时间是全部卡死的那个时间点吗。
感觉像被ctrl c又不输yes的感觉,都attach不上去了。
用jconsole挂上去然后等卡死看看吧。

【热门文章】
【热门文章】