Java服务OOM,最常见的原因为:
(1)有可能是内存分配确实过小,而正常业务使用了大量内存;
(2)某一个对象被频繁申请,却没有释放,内存不断泄漏,导致内存耗尽;
(3)某一个资源被频繁申请,系统资源耗尽,例如:不断创建线程,不断发起网络连接。
然后使用以下的命令或工具逐一排查:
(一)确认是不是内存本身就分配过小
方法:jmap -heap 10765 可以查看新生代,老生代堆内存的分配大小以及使用情况,看是否本身分配过小。
(二)找到最耗内存的对象
方法:jmap -histo:live 10765 | more 使用该命令后,会以表格的形式显示存活对象的信息,并按照所占内存大小排序,找到最耗内存的对象。
(三)确认是否是资源耗尽
工具:pstree netstat 查看进程创建的线程数,以及网络连接数,如果资源耗尽,也可能出现OOM。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。