20210713 日下午3点,jenkins master 访问失败,页面出现 504,登录服务器,发现tomcat正常,服务并没有挂掉,但cpu打满,导致请求超时!
问题处理过程如下:
- top
- 查看cpu使用情况,发现是 18454 这个进程,cpu占用达到 787%(服务器8c16g)
- top -p 18454 -H
- 查看改进程下,线程占用cpu的情况,发现有8个线程,每个线程的cpu占用情况达到 90% 以上
- 选择其中一个线程 ,15792
- printf "%x \n" 15792
- 将10进制转为16进制
- jstack 18454|grep 3db0 -C 30
- 查看具体问题,发现是 GC 占用的cpu,垃圾回收机制起了 8个线程,每个线程都占用了大量的cpu,导致STW,因此想限制垃圾回收时启动线程的数量
- 因为项目是tomcat启动的,需要修改tomcat启动 jvm的参数,tomcat的配置文件在 bin目录下的 catalina.sh
- 设置 jvm 启动参数,重启tomcat生效
- JAVA_OPTS="-XX:ParallelCMSThreads=4"