linux解决java内存溢出问题总结

    xiaoxiao2021-03-25  149

    最近项目中遇到内存溢出问题,随着程序的运行,内存只增不减,最终达到系统内存最大值,总结了一下解决此问题的过程

    1,top 查看java程序的pid

    2,jmap -histo:live pid > pid.txt  此命令可以查看当前java程序中内个对象的数量和占用空间

    ps:也可以通过jmap -histo pid | head -n10 查看前10行的值

    通过查看获取到[C代表Char ,从此图可以看到当前String占用很多

    3,上图还是分析不出来哪个对象占用的多,需要借助 

    jmap -dump:format=b,file=a.txt pid

    jhat -J-Xmx1024M a.txt

    上面两个命令可以以页面的形式查看java程序内的内存分配情况

    4,可以通过ip:7000访问此java内存的页面,

    5,通过以上分析出,我的User对象没有释放,导致User引用的所有对象都常驻内存,导致内存溢出,找到最下方的other query

    进入 Show heap histogram 

    通过instance count 对比找出自己怀疑的异常对象,一般是自己包名下的类

    通过References to this object 找出引用此对象的object,我通过此过程找到了内存不释放的原因

    祝你好运

    转载请注明原文地址: https://ju.6miu.com/read-3277.html

    最新回复(0)