oom和cpu负载的定位

一、oom定位
出现OOM 常见的原因:
1、内存分配小 默认初始值无法承担过大的业务
2、大对象没有及时释放 可以参考强链接及时置为null,
3、网络不通频繁请求链接 服务端网络异常问题
4、程序问题频繁创建线程 代码逻辑不严谨等

2种排查方式:线上linux服务器排查、通过插件排查
线上linux服务器排查:
1、查发生了OOM的进程${pid}
执行top -d 1 -c,每秒刷新一次,显示进程运行信息列表
键入M (大写m),进程按照内存使用排序
2、jmap -heap ${pid} 查看xmx xms等使用情况
3、jmap -histo:live ${pid} | more 找到最耗内存对象
4、ps -efL ${pid} 确认是否是资源耗尽 如果资源耗尽,也可能出现OOM

通过插件排查:
服务器启动加入参数
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/${path}/oom.hprof
如果出现oom则对应目录生成oom.hprof文件
然后在本地环境服务器:
安装mat插件 或jconsole 插件等 把oom.hprof文件导入即可

二、CPU 负载高定位
ps -ef|grep tomcat 查tomcat pid
通过top -Hp ${pid} 可以查看该进程下各个线程的cpu使用情况
用jstack ${pid} 或 jstack -l ${pid} >jvm_listlocks.txt 导出线程的 dump日志

posted @ 2020-05-14 17:42  吴某1  阅读(487)  评论(0编辑  收藏  举报