Tomcat夯死, JVM参数优化

今天,浙江同事求救,说某一个节点上的某一个端口Tomcat很慢,但其他端口、节点的Tomcat没问题

  1. 现象
    0.1 前台请求偶尔很慢很慢,但服务也没挂
    0.2 具体到某一个Tomcat时,总是很慢,但进程还在

  2. top
    1.1 看下当前系统负载 load average 通常在较小,经验值0.x-2.x
    夯死的时候,load average 8+
    1.2 看tomcat进程的系统资源使用情况,通常CPU<100%,内存情况看各地
    夯死的时候,CPU 800%+
    1.3 netstat -anp|grep tomcat-pid 观察网络情况
    夯死的时候,大量CLOSE_WAIT连接未释放

  3. jstat -gcutil PID
    查看这个进程的gc情况
    jstat -gcutil 7317

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 11.41 37.17 57.94 98.47 97.47 39 1.448 4 0.498 1.945
  1. 看具体进程内存情况 top -p PID
    RES如果高于Xmx,势必会GC

  2. 看tomcat的JVM参数
    [root@XXX-WEB-01 admin]# ps -ef|grep tomcat
    xxxx 7317 1 0 Nov20 ? 00:07:38 /home/dacp/jdk1.8.0_51/jre/bin/java -Djava.util.logging.config.file=/home/dacp/Tomcat-18080/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms1g -Xmx2g -XX:+UseParallelOldGC -Djava.security.egd=file:/dev/../dev/urandom -Djava.endorsed.dirs=/home/dacp/Tomcat-18080/endorsed -classpath /home/dacp/Tomcat-18080/bin/bootstrap.jar:/home/dacp/Tomcat-18080/bin/tomcat-juli.jar -Dcatalina.base=/home/dacp/Tomcat-18080 -Dcatalina.home=/home/dacp/Tomcat-18080 -Djava.io.tmpdir=/home/dacp/Tomcat-18080/temp org.apache.catalina.startup.Bootstrap start

比较Xmx与当前内存RES情况

  1. 如果CPU过高,找到该进程后,定位具体线程或代码,首先显示线程列表,并按照CPU占用高的线程排序:
    ps -mp PID -o THREAD,tid,time | sort -rn | head -10
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
xxxx 0.6 - - - - - - 00:07:58
xxxx 0.2 19 - futex_ - - 3270 00:02:49
xxxx 0.0 19 - inet_c - - 3277 00:00:00
xxxx 0.0 19 - inet_c - - 3273 00:00:00
xxxx 0.0 19 - inet_c - - 3271 00:00:00
xxxx 0.0 19 - inet_c - - 3203 00:00:05
xxxx 0.0 19 - futex_ - - 7644 00:00:00
xxxx 0.0 19 - futex_ - - 3420 00:00:00
xxxx 0.0 19 - futex_ - - 3288 00:00:06
  1. 将需要的线程ID转换为16进制格式:printf "%x\n" TID

  2. 最后打印线程的堆栈信息:jstack PID |grep TID -A 30
    示例:
    jstack 2633 |grep e18 -A 30


浙江这次,cpu占用高的线程,均为parallel gc...
结合内存情况,JVM参数,判断为JVM内存设置太低,导致频繁gc。

方案:
推荐加大tomcat JVM中的Xmx,结合服务器内存配置,给出合理值。
如目前加大Xmx至4g

你可能感兴趣的:(Tomcat夯死, JVM参数优化)