cup100-percent

工作中遇到java进程 cpu100% 的问题,进行总结

top

使用 top -Hp pid 查看对应进程里的所有线程
按 cpu 使用率 排序

jstack查看线程堆栈

使用jstack pid 或者 kill -3 pid 查看线程堆栈
连续几秒 打印 jstack ,经常出现的线程,可能是引起cpu 100% 的原因

火焰图

参考 https://cloud.tencent.com/developer/article/1554194
可以用 async-profiler 工具
如果是一直100%,则使用

./bin/profiler -d 2 -f result.html pid

表示 统计2s内 的cpu时间轮 主要耗在哪几个线程上
例如 log4j 2s内 线程占用了50%的时间,这个就不正常了
再往上看,用了asynAppender,因此判断是刷了太多异步日志导致cpu 100%

https://ask.qcloudimg.com/http-save/yehe-1201376/n5l625n4oj.jpeg
火焰图

nmon、perf等系统监控工具

thread 切换频率过快 –> springcloud eureka 心跳同步问题