jvm 频繁Full GC和CPU使用率飙升负载现象和问题解决
项目场景:
环境:
docker(1.2c、6G)、jdk1.8、mysql 、ssm,log2j1
问题描述:
是这样的,项目上线后发现出现cpu飙升,紧接着 JVM 频繁full GC了,紧接着请求变慢了,最终导致,所有接口请求超时。
原因分析:
通过终端查询那个线程cpu使用率较高,
1、先找到java进程pid
2、然后查询当前进程下的线程 cpu占比降序排序, top -H -p [java进程pid]
。
3、十进制转换16进制 printf %x [cpu飙升线程ID]
4、得出十进制的线程id jstack查询线程堆栈信息 stack 68 | grep -a [十进制线程ID]
发现cpu使用率较高的线程,因为那块代码发现有问题,会循环跑很多次,导致cpu频繁切换。
解决方案:
修改存在问题的代码。