您的位置:首页 > 运维架构 > Linux

记录 Linux环境下java web项目CPU爆表 “事故”,肇事者:GC

2016-06-22 16:55 579 查看
笔者今天将新开发的项目部署到新服务器的时候,出现了个“奇怪”的现象。项目启动完毕后,一切正常。在运行其中一个项目的时候,突然出现卡格的现象,很久没有响应。于是通过top查看,发现tomcat进行的cpu竟然达到100+%!!

        这是在测试过程中不曾出现的,于是开始查看问题所在。

①top查看cpu情况,获取cpu爆表的进程id(pid)

②top -H -p 8413  查看导致cpu爆表的线程id(pid):8423

    将对于pid从十进制转换成十六进制

③使用jstack pid(进程号) > jstack_log.log

    jstack 6989 > a.txt

    将堆栈信息导出。查找nid=Ox20e7的信息

"VM Thread" prio=10 tid=0xf68e9400 nid=0x20e7 runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0xf680c400 nid=0x20df runnable 

"GC task thread#1 (ParallelGC)" prio=10 tid=0xf680dc00 nid=0x20e0 runnable 

"GC task thread#2 (ParallelGC)" prio=10 tid=0xf680f400 nid=0x20e1 runnable 

"GC task thread#3 (ParallelGC)" prio=10 tid=0xf6810800 nid=0x20e2 runnable 

"GC task thread#4 (ParallelGC)" prio=10 tid=0xf6812000 nid=0x20e3 runnable 

"GC task thread#5 (ParallelGC)" prio=10 tid=0xf6813400 nid=0x20e4 runnable 

"GC task thread#6 (ParallelGC)" prio=10 tid=0xf6814c00 nid=0x20e5 runnable 

"GC task thread#7 (ParallelGC)" prio=10 tid=0xf6816000 nid=0x20e6 runnable 

发现是GC导致的cpu过高的问题。

④然后笔者使用jstat -gc 8413 5000 进行观察

[root@cncln ~]# jstat -gc 8647 5000

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   

 64.0   64.0   16.0   0.0   349376.0   0.0     699072.0   25557.0   65536.0 65536.0    344    0.748  331    73.973   74.721

 64.0  128.0   64.0   0.0   349248.0   0.0     699072.0   25556.1   65536.0 65536.0    366    0.781  353    78.904   79.685

128.0  128.0   48.0   0.0   349248.0   0.0     699072.0   25557.4   65536.0 65536.0    388    0.817  375    83.834   84.650

128.0  128.0   0.0    0.0   349248.0   0.0     699072.0   25559.9   65536.0 65536.0    411    0.852  398    88.979   89.831

128.0  128.0   0.0    0.0   349248.0   0.0     699072.0   25559.2   65536.0 65536.0    433    0.895  420    93.903   94.797

 64.0   64.0   0.0    0.0   349312.0   0.0     699072.0   25559.8   65536.0 65536.0    455    0.930  442    98.823   99.753

 64.0  128.0   0.0    0.0   349248.0   0.0     699072.0   25558.9   65536.0 65536.0    477    0.972  464   103.743  104.715

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25557.8   65536.0 65536.0    499    1.009  486   108.653  109.662

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25556.1   65536.0 65536.0    521    1.052  508   113.594  114.647

128.0  128.0   0.0    0.0   349248.0   0.0     699072.0   25554.7   65536.0 65536.0    543    1.099  530   118.535  119.634

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25553.5   65536.0 65536.0    565    1.143  552   123.468  124.610

128.0  128.0   0.0    0.0   349248.0   0.0     699072.0   25551.9   65536.0 65536.0    587    1.184  574   128.418  129.602

128.0  128.0   0.0    0.0   349248.0   0.0     699072.0   25550.2   65536.0 65536.0    609    1.220  596   133.351  134.571

128.0  128.0   0.0    0.0   349248.0   0.0     699072.0   25559.7   65536.0 65536.0    631    1.257  618   138.331  139.588

128.0  128.0   0.0    0.0   349248.0   0.0     699072.0   25555.9   65536.0 65536.0    653    1.299  640   143.263  144.561

128.0  128.0   0.0    0.0   349248.0   0.0     699072.0   25554.4   65536.0 65536.0    675    1.349  662   148.128  149.477

 64.0   64.0   64.0   0.0   349376.0   0.0     699072.0   25554.2   65536.0 65536.0    696    1.389  683   152.811  154.200

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25554.3   65536.0 65536.0    717    1.426  704   157.497  158.923

 64.0   64.0   48.0   0.0   349376.0   0.0     699072.0   25554.2   65536.0 65536.0    738    1.461  725   162.145  163.606

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25554.2   65536.0 65536.0    759    1.495  746   166.845  168.340

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25554.2   65536.0 65536.0    779    1.526  766   171.358  172.884

 64.0   64.0   16.0   0.0   349376.0   0.0     699072.0   25554.2   65536.0 65536.0    800    1.563  787   176.054  177.617

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25554.3   65536.0 65536.0    821    1.607  808   180.676  182.282

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25554.2   65536.0 65536.0    842    1.646  829   185.267  186.913

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25554.2   65536.0 65536.0    863    1.692  850   190.063  191.755

 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   25554.3   65536.0 65536.0    885    1.726  872   194.630  196.356

发现所有的年轻代,老年代以及持久代的容量一直不断在上升,直至持久代被占满,频繁的触发FGC。

⑤同时查看了gc日志,也证实了这一点,发现GC的频率很高。

发现一秒内竟然触发了5次Full GC

终于在确定了是tomcat内存不足导致的问题后,配置了tomcat的内存后重新启动,项目运行正常:)

附:
linux  tomcat  GC、内存配置

vim apache-tomcat-6.0.32/bin/catalina.sh 

#JAVA_OPTS="-Xloggc:/usr/local/space/logs/gc_tomcat.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC "

JAVA_OPTS="-Xms512m -Xmx1024m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java cpu 事故