【性能调优】OOM问题

OOM发生的一般原因:

  1. 资源不够
    可能是内存分配过小,而正常业务却使用了大量的内存
  2. 申请的资源太多
    某一个对象被频繁的申请,却没有被释放,内存不断泄露,最终导致内存耗尽
  3. 资源耗尽
    某一个资源被频繁的申请,系统在资源耗尽,例如不断的创建线程,不断的发起网络连接

定位方法:
步骤一:确认内存本身分配是不是过小

jmap -heap 进程id

在这里插入图片描述
步骤二:找到最耗费内存的对象

jmap -histo:live 进程id | more

在这里插入图片描述
步骤三:确认资源是否耗尽
pstree和netstat来查看进程创建的线程数,以及网络连接数等资源是否被耗尽

内存分析简单有效的方法是通过内存的dump命令,导出内存栈,但是这个命令会进行full GC一次,导出的文件可以通过MAT VisualVM查看
如下图显示

showllow heap表示的是对象本身的大小,retained heap表示的是本身的大小加引用的大小
另外如果要定位代码正在做什么事情

原文地址:https://www.cnblogs.com/guanhuohuo/p/12533553.html