现象
客户生产环境 ,cpu占用100%,最后系统宕机
排查过程
1、jmap查看内存对象
根据图可以看出,排在第一位的对象是
AttendanceDTO
将近1亿
2、jstack 查看线程信息
jstack PID | grep 线程ID
查看线程堆栈信息 (linux
环境)jstack -l PID
查看线程堆栈信息jstack PID >> stack.txt
将当前所有堆栈信息输出到stack.txt
文件中
3、分析线程
在线工具
https://fastthread.io/
根据图可以看出,线程名称:att_month_calculate, 阻塞了200个。导致cpu一直上升
点击线程名称,进入查看详情
4、查看线程信息
根据关键信息,找到对应的代码
nid = 0x134dc0 表示线程ID(16进制)
总结
优化方向主要
1、优化自定义脚本执行速度