如何排查JVM内存占用过高
1、當(dāng)程序沒有內(nèi)存溢出OOM(out of memory)時(shí)
注意:jmap需要依賴jdk的devel包
查詢class內(nèi)存占用命令:
先用top命令查詢程序的pid
# jmap -histo 878193可以看到該項(xiàng)目內(nèi)存的占用情況,就可以分析出是哪里的問題了
注意:這里的[B 和 [C的表示的是數(shù)組,[[B 是byte的二維數(shù)組
[Z = boolean [B = byte [S = short [I = int [J = long [F = float [D = double [C = char [L = any non-primitives(Object)jmap其他命令:
# jmap -heap pid 查詢pid的整體堆信息 # jmap -histo:live pid>a.log 查詢heap中所有生存的對象堆信息,并保存到文件中注意: 這個(gè)命令執(zhí)行,JVM會(huì)先觸發(fā)gc,然后再統(tǒng)計(jì)信息。 # jmap -dump:live,format=b,file=a.log pid 內(nèi)存信息dump到a.log文件中注意: jmap -dump 會(huì)將整個(gè)heap導(dǎo)出,如果heap很大的話,會(huì)比較耗時(shí),且會(huì)暫停應(yīng)用,慎用2、當(dāng)程序已經(jīng)訪問不了時(shí),需要導(dǎo)出dump日志是要工具分析
# java -XX:+PrintFlagsFinal -version通過這個(gè)命令看jdk是否開啟開啟堆內(nèi)存溢出時(shí),自動(dòng)導(dǎo)出dump文件
HeapDumpOnOutOfMemoryError 堆內(nèi)存溢出時(shí)自動(dòng)導(dǎo)出開關(guān),默認(rèn)false HeapDumpPath 堆內(nèi)存溢出時(shí)dump文件導(dǎo)出路徑
開啟方法:
1、配置方法
在JAVA_OPTIONS變量中增加
2、參數(shù)說明
(1)-XX:+HeapDumpOnOutOfMemoryError參數(shù)表示當(dāng)JVM發(fā)生OOM時(shí),自動(dòng)生成DUMP文件。
(2)-XX:HeapDumpPath={目錄} 參數(shù)表示生成DUMP文件的路徑,
也可以指定文件名稱,例如:-XX:HeapDumpPath=${目錄}/java_heapdump.hprof。
如果不指定文件名,默認(rèn)為:java_pid_date_time_heapDump.hprof。
查看dump文件工具
MAT、visualVM等都可以的
總結(jié)
以上是生活随笔為你收集整理的如何排查JVM内存占用过高的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何利用虚拟光驱安装windows 7?
- 下一篇: 【MATLAB-app】appdesig