收到告警
- top 找到进程
- top -H -p pid 找到对应的线程,转16进制. mac上的工具可以直接转 , 是否是某一个线程存在死循环等等
- jstat -gcutil
- 查看是否频繁fullgc,内存问题
- 突发的大数据
- 一直存在的内存泄漏
- 查看是否频繁fullgc,内存问题
- jstack
- jstack pid.
- 如果应用启动的时候卡住,可以使用jstack获取堆栈,常规经验来说,就是堆栈最长的那个 😂 😄 🌲
- jmap
- jmap -histo pid |head -n 200
- jmap -dump:live,format=b,file=pid.hprof pid
如果是突发事件,基本上通过jmap histo 和 jstack 就可以找到是那部分突然上来了. 可以找到对应的责任人来进行处理
如果是非突发事件,可能是存在内存泄漏,需要生成dump文件在看看。