在我们的程序运行过程中,经常会因为各种原因出现OutOfMemoryError的错误,而如何定位是由哪个对象溢出,可通过以下方法进行查看
1、查找JVM运行的任务号
ps aux |grep ${pid} 或
jps -m |grep ${pid}
2、运行jmap命令,将java的内存镜像dump到heap.bin文件中
jmap -dump:live,format=b,file=heap.bin ${pid}
3、运行jhat命令对heap.bin文件进行内存分析(Xmx的参数应该要比监测的heap.bin的heap大一些,才可以进行分析)
jhat -J-Xmx4g heap.bin
在执行完成jhat命令后,启动一个http服务,端口为7000,可以通过webUI的方式查看“show heap histogram”。通过此直方图可以看到heap中从高到低的内存对象,及对象的引用等信息。
PS:使用jstack ${pid}可以查看当前任务的运行情况。
转载于:https://blog.51cto.com/chengyanbin/1391501