JVM-调优

匆匆过客 提交于 2020-03-12 11:45:39

关于CPU过载

CPU占用率及对应进程ID(pid)可以通过top命令确定,100%占有率可能由于以下两点导致:

1、堆内存不足导致频繁Full GC
   A、sudo jmap -heap pid  查看堆内存的消耗情况;
   B、sudo jstat -gc pid interval count 查看GC情况,示例:sudo jstat -gc 5746 3000 5 代表查看5746进程的GC情况、每隔3000毫秒打印一次、总共打印5次。如果FGC/FGCT增长明显,说明Full GC很频繁。
    解决方案:
        如果情况紧急,那得马上重启Java应用进程;
        不紧急的话需要获取相关信息用于分析为什么堆内存被消耗完了,可能有内存泄漏问题;
                1)sudo jmap -histo pid | head -n 20 查看Java对象的占用统计信息
                2)sudo jmap -dump:live,format=b,file=heap.bin pid 把堆转储导出到本地文件,可以用 Eclipse MAT 工具分析内存泄漏

2、代码实现
    A、top -H -p pid 先查到本地系统CPU占用率高的线程ID,把对应的线程ID拷贝下来,转为十六进制;
    B、sudo jstack -l -F pid | less 获取Java线程堆栈,用十六进制的本地线程ID搜索,会在某一行的nid处找到对应的线程。查看Java线程堆栈,找到对应的Java类及行号,然后阅读代码查找可能的问题原因
                

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!