CPU过载问题
除了计算密集程序外,一般是出现死循环
(1)定位CPU占比高的进程:top
(2)查询该进程下的各线程CPU使用情况:top -Hp pid
(3)将以上线程id转成16进制:printf ‘%x \n’ 线程id
(4)导出线程快照信息,查看以上线程正在进行什么操作:jstack pid |grep 16进制线程id -A 10,定位到异常代码位置,检查是否存在死循环
内存过高问题
一般是内存泄漏,内存溢出导致
(1)导出线程快照日志查看是否存在异常:jstack pid
重点关注:
a.GC情况(是否存在大量GC线程):
b.持续runnable的IO线程:线程状态是runnable,调用栈在socket流或read方法上;调用栈包含jdbc相关包,考虑数据库死锁
c.线程死锁,jstack会分析出该情况
(2)jmap导出堆栈日志,查看什么对象在占用空间,常见代码误操作导致,或线程创建过多导致:jmap -dump:format=b,file=文件名.hprof pid,可使用IBM HeapAnalyzer或Eclipse Memory Analyzer工具进行分析
jmap [option] pid
jmap -heap结果
JVM内存模型
推荐博客:https://blog.csdn.net/a745233700/article/details/122660058