快速定位Java线上内存OOM问题
Java的OOM问题,各式各样。
1、使用top查看PID
2、使用jmap -heap PID 查询JVM内存信息,确认是否是内存本身就分配的不够
3、使用jmap -histo:live PID | more 查找实例列表中最耗内存的对象
其中按照所占内存排序,分别是实例数,所在内存大小,类名。通过列表可以直观的
找到最耗内存的类名,然后到代码中找到对应的类进行排查问题。
4、确认是否资源耗尽
使用pstree -up PID 查看进程线程树
使用netstat查看网络连接数
还可以通过
ll /proc/${PID}/fd 查看句柄详情
ll /proc/${PID}/task 查看线程数
统计判断进程打开句柄和线程数,只需要简单统计一下
ll /proc/${PID}/fd | wc -l
ll /proc/${PID}/task | wc -l
pstree -p |wc -l