JVM狀態(tài)監(jiān)控常用命令整理總結(jié)
2024-06-28 16:00:30
供稿:網(wǎng)友
java.lang.OutOfMemoryError: Java heap space這個(gè)錯(cuò)誤表示JVM的新生代和老生代的內(nèi)存不足。出現(xiàn)這個(gè)錯(cuò)誤說(shuō)明應(yīng)用程序出現(xiàn)了內(nèi)存溢出或者程序所需要的內(nèi)存大于JVM的內(nèi)存設(shè)置了。遇到這個(gè)問(wèn)題的時(shí)候,首先我們可以調(diào)節(jié)JVM的HEAP內(nèi)存的大小,具體可以通過(guò)-Xms和-Xmx來(lái)進(jìn)行設(shè)置,如果設(shè)置大以后還是會(huì)出現(xiàn)內(nèi)存溢出,那么說(shuō)明應(yīng)用程序本身存在內(nèi)存泄露,這個(gè)時(shí)候就需要我們對(duì)應(yīng)用程序進(jìn)行檢查,找出導(dǎo)致內(nèi)存泄露的地方,然后修正。http://www.360doc.com/content/10/0301/13/57735_17193048.shtml下面列出JVM狀態(tài)監(jiān)控的幾個(gè)Java命令1,查看JVM進(jìn)程內(nèi)存使用resource top top -p 6917查看系統(tǒng)內(nèi)存使用情況free -m2,查看堆內(nèi)存使用情況 最大堆內(nèi)存配置,年輕代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堆中對(duì)象詳細(xì)占用情況jmap -histo 6917 > jmaphisto1819.loghttps://my.oschina.net/feichexia/blog/196575堆內(nèi)存 = 年輕代 + 年老代 + 永久代年輕代 = Eden區(qū) + 兩個(gè)Survivor區(qū)(From和To)3,進(jìn)程堆棧狀態(tài)輸出 線程阻塞或等待等狀態(tài)jstack 6917 > jstack1802.log在發(fā)生死鎖時(shí)可以用jstack -l pid來(lái)觀察鎖持有情況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堆內(nèi)存使用和GC回收狀態(tài) 250MS一次,執(zhí)行4次.jstat -gc 6917 250 4 > /tmp/jvmgc25042216.log5,查看JAVA進(jìn)程 jpsjps -v 查看進(jìn)程啟動(dòng)時(shí)所帶的JVM參數(shù)6,進(jìn)程內(nèi)存使用情況dump到文件中(1)jmap -dump:format=b,file=/tmp/dump.dat 6917因生成轉(zhuǎn)儲(chǔ)文件大時(shí)很耗費(fèi)系統(tǒng)資源,應(yīng)避免系統(tǒng)高峰時(shí)運(yùn)行此指令,否則會(huì)導(dǎo)致系統(tǒng)短暫無(wú)響應(yīng)情況.(2)使用hPRof。啟動(dòng)虛擬機(jī)加入-Xrunhprof:head=site,會(huì)生成java.hprof.txt文件。該配置會(huì)導(dǎo)致jvm運(yùn)行非常的慢,不適合生產(chǎn)環(huán)境。(3)同10.在應(yīng)用啟動(dòng)時(shí)配置相關(guān)的參數(shù) -XX:+HeapDumpOnOutOfMemoryError,當(dāng)應(yīng)用拋出OutOfMemoryError時(shí)生成dump文件。http://www.blogjava.net/mlh123caoer/archive/2011/10/04/360020.html7,查看進(jìn)程啟動(dòng)的參數(shù)配置8,heap內(nèi)存分析jhat -J-Xmx1024M /tmp/dump.dat執(zhí)行后等待console 中輸入start HTTP server on port 7000 即可使用瀏覽器訪問(wèn) ip:7000這個(gè)也就平時(shí)自己玩兒的時(shí)候用用,在生產(chǎn)環(huán)境就不太靠譜兒.http://lc87624.CUOxin.com/blog/1711071Eclipse Memory Analyzereclipse 市場(chǎng)查找安裝.IBM HeapAnalyzerftp://public.dhe.ibm.com/software/websphere/appserv/support/tools/HeapAnalyzer/ha456.jarD:/>java -Xmx512m -jar ha456.jar dumpserver12232.dat9,生成線程堆棧信息kill -3 后面跟上java進(jìn)程的pid,這樣就能生成 thread dump 了.因?yàn)閖vm已經(jīng)hang了,所以有時(shí)候kill -3看不到線程棧是正常的。http://hllvm.group.CUOxin.com/group/topic/3957010,堆內(nèi)存溢出時(shí)保存線程堆棧到文件中HeapDumpOnOutOfMemoryError 在jvm的 啟動(dòng)參數(shù)中追加 下列信息,可以在發(fā)生 OutOfMemoryError的時(shí)候生成 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,查看運(yùn)行JVM進(jìn)程時(shí)指定的參數(shù) 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,調(diào)優(yōu)總結(jié) xms xmx xmn xsshttp://unixboy.CUOxin.com/blog/174173/