CPU100%解决思路
1、查消耗cpu最高的进程PID。
top -c
显示进程运行信息列表,
P
进程按照cpu使用率排序,发现第一位使用率172%,记下PID:9047。记下项目名:erp-web-api。
2、根据PID查出消耗cpu最高的线程号。
top -Hp 9047
显示一个进程的线程运行信息列表。
P
进程按照cpu使用率排序,前面四个的cpu都是80+%,记下四个线程号,分别是:9099、9102、27967、27970。
3、把四个线程号转成十六进制
printf %x 9099
238b
printf %x 9102
238e
printf %x 27967
6d3f
printf %x 27970
6d42
4、
jstack -l 9047 > ./9047.stack
根据线程号查出对应的java线程,进行处理。
cat 9047.stack | grep '238b' -C 20
执行grep命令,看线程238b做了什么。
由图可见,cpu使用率高的线程都在GC task,JVM的GC线程一直在占用大量CPU
cat 6846.stack | grep 'erp-web-api' -C 20 | less
可以看到对应的日志
常用命令
jps 列出了当前系统中存在的java进程
top -p 3618 这里的3618是上一行返回的进程id
jstat -gcutil 18862 2000 20 输出进程ID为3618的内存使用情况(每2000毫秒输出一次,一共输出20次)
jstack 6400 > stack.out 导出线程栈