JVM狀態監控常用命令整理總結
2024-06-28 16:00:30
供稿:網友
java.lang.OutOfMemoryError: Java heap space這個錯誤表示JVM的新生代和老生代的內存不足。出現這個錯誤說明應用程序出現了內存溢出或者程序所需要的內存大于JVM的內存設置了。遇到這個問題的時候,首先我們可以調節JVM的HEAP內存的大小,具體可以通過-Xms和-Xmx來進行設置,如果設置大以后還是會出現內存溢出,那么說明應用程序本身存在內存泄露,這個時候就需要我們對應用程序進行檢查,找出導致內存泄露的地方,然后修正。http://www.360doc.com/content/10/0301/13/57735_17193048.shtml下面列出JVM狀態監控的幾個Java命令1,查看JVM進程內存使用resource top top -p 6917查看系統內存使用情況free -m2,查看堆內存使用情況 最大堆內存配置,年輕代EC/EU,FROM/TO,老年代OC/OU,永久代PC/PC的使用jmap -heap 6917此命令可查看使用的垃圾收集器配置. Parallel GC with 4 thread(s)http://www.CUOXin.com/0616--ataozhijia/p/4136312.html查看JVM堆中對象詳細占用情況jmap -histo 6917 > jmaphisto1819.loghttps://my.oschina.net/feichexia/blog/196575堆內存 = 年輕代 + 年老代 + 永久代年輕代 = Eden區 + 兩個Survivor區(From和To)3,進程堆棧狀態輸出 線程阻塞或等待等狀態jstack 6917 > jstack1802.log在發生死鎖時可以用jstack -l pid來觀察鎖持有情況http://blog.csdn.net/rachel_luo/article/details/8920596http://jameswxx.CUOxin.com/blog/1041173http://itindex.net/detail/48955-jstack-dump-%E6%97%A5%E5%BF%97http://www.CUOXin.com/zhengyun_ustc/archive/2013/01/06/dumpanalysis.html4,了解JVM堆內存使用和GC回收狀態 250MS一次,執行4次.jstat -gc 6917 250 4 > /tmp/jvmgc25042216.log5,查看JAVA進程 jpsjps -v 查看進程啟動時所帶的JVM參數6,進程內存使用情況dump到文件中(1)jmap -dump:format=b,file=/tmp/dump.dat 6917因生成轉儲文件大時很耗費系統資源,應避免系統高峰時運行此指令,否則會導致系統短暫無響應情況.(2)使用hPRof。啟動虛擬機加入-Xrunhprof:head=site,會生成java.hprof.txt文件。該配置會導致jvm運行非常的慢,不適合生產環境。(3)同10.在應用啟動時配置相關的參數 -XX:+HeapDumpOnOutOfMemoryError,當應用拋出OutOfMemoryError時生成dump文件。http://www.blogjava.net/mlh123caoer/archive/2011/10/04/360020.html7,查看進程啟動的參數配置8,heap內存分析jhat -J-Xmx1024M /tmp/dump.dat執行后等待console 中輸入start HTTP server on port 7000 即可使用瀏覽器訪問 ip:7000這個也就平時自己玩兒的時候用用,在生產環境就不太靠譜兒.http://lc87624.CUOxin.com/blog/1711071Eclipse Memory Analyzereclipse 市場查找安裝.IBM HeapAnalyzerftp://public.dhe.ibm.com/software/websphere/appserv/support/tools/HeapAnalyzer/ha456.jarD:/>java -Xmx512m -jar ha456.jar dumpserver12232.dat9,生成線程堆棧信息kill -3 后面跟上java進程的pid,這樣就能生成 thread dump 了.因為jvm已經hang了,所以有時候kill -3看不到線程棧是正常的。http://hllvm.group.CUOxin.com/group/topic/3957010,堆內存溢出時保存線程堆棧到文件中HeapDumpOnOutOfMemoryError 在jvm的 啟動參數中追加 下列信息,可以在發生 OutOfMemoryError的時候生成 oom.hprof文件catalina.sh添加:JAVA_OPTS="$JAVA_OPTS -Xmx52m -Xms52m -XX:PermSize=25m -XX:MaxPermSize=25m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/tomcat8093.dump"http://blog.csdn.net/jiangguilong2000/article/details/847636111,查看運行JVM進程時指定的參數 jinfo -flags 6917jinfo 6917jinfo -flag MaxNewSize 6917http://www.CUOXin.com/redcreen/archive/2011/05/04/2037057.html12,選擇垃圾收集器http://blog.csdn.net/historyasamirror/article/details/623300713,調優總結 xms xmx xmn xsshttp://unixboy.CUOxin.com/blog/174173/