Java内存使用情况查看工具
生活随笔
收集整理的這篇文章主要介紹了
Java内存使用情况查看工具
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Java通過jvm自己管理內(nèi)存,同時Java提供了一些命令行工具,用于查看內(nèi)存使用情況。
這里主要介紹一下jstat、jmap命令以及相關(guān)工具。
命令參數(shù)說明: Options,一般使用?-gcutil?或??-gc?查看gc?情況 pid,當(dāng)前運(yùn)行的?java進(jìn)程號?
interval,間隔時間,單位為秒或者毫秒?
count,打印次數(shù),如果缺省則打印無數(shù)次
Options?參數(shù)如下: -gc:統(tǒng)計?jdk gc時?heap信息,以使用空間字節(jié)數(shù)表示 -gcutil:統(tǒng)計?gc時,?heap情況,以使用空間的百分比表示 -class:統(tǒng)計?class loader行為信息 -compile:統(tǒng)計編譯行為信息 -gccapacity:統(tǒng)計不同?generations(新生代,老年代,持久代)的?heap容量情況 -gccause:統(tǒng)計引起?gc的事件 -gcnew:統(tǒng)計?gc時,新生代的情況 -gcnewcapacity:統(tǒng)計?gc時,新生代?heap容量 -gcold:統(tǒng)計?gc時,老年代的情況 -gcoldcapacity:統(tǒng)計?gc時,老年代?heap容量 -gcpermcapacity:統(tǒng)計?gc時,?permanent區(qū)?heap容量
示例? ? $?jstat -gc 12538 5000 每5?秒一次顯示進(jìn)程號為?12538的?java進(jìn)成的?GC情況,結(jié)果如下圖:
結(jié)果說明
| 標(biāo)志 | 說明 |
| S0C | 年輕代中第一個survivor區(qū)的容量 (字節(jié)) |
| S1C | 年輕代中第二個survivor區(qū)的容量 (字節(jié)) |
| S0U | 年輕代中第一個survivor區(qū)目前已使用空間 (字節(jié)) |
| S1U | 年輕代中第二個survivor區(qū)目前已使用空間 (字節(jié)) |
| EC | 年輕代中Eden的容量 (字節(jié)) |
| EU | 年輕代中Eden目前已使用空間 (字節(jié)) |
| OC | Old代的容量 (字節(jié)) |
| OU | Old代目前已使用空間 (字節(jié)) |
| PC | Perm(持久代)的容量 (字節(jié)) |
| PU | Perm(持久代)目前已使用空間 (字節(jié)) |
| YGC | 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù) |
| YGCT | 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c所用時間(s) |
| FGC | 從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù) |
| FGCT | 從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s) |
| GCT | 從應(yīng)用程序啟動到采樣時gc用的總時間(s) |
| NGCMN | 年輕代(young)中初始化(最小)的大小 (字節(jié)) |
| NGCMX | 年輕代(young)的最大容量 (字節(jié)) |
| NGC | 年輕代(young)中當(dāng)前的容量 (字節(jié)) |
| OGCMN | old代中初始化(最小)的大小 (字節(jié)) |
| OGCMX | old代的最大容量 (字節(jié)) |
| OGC | old代當(dāng)前新生成的容量 (字節(jié)) |
| PGCMN | perm代中初始化(最小)的大小 (字節(jié)) |
| PGCMX | perm代的最大容量 (字節(jié))?? |
| PGC | perm代當(dāng)前新生成的容量 (字節(jié)) |
| S0 | 年輕代中第一個survivor區(qū)已使用的占當(dāng)前容量百分比 |
| S1 | 年輕代中第二個survivor區(qū)已使用的占當(dāng)前容量百分比 |
| E | 年輕代中Eden已使用的占當(dāng)前容量百分比 |
| O | old代已使用的占當(dāng)前容量百分比 |
| P | perm代已使用的占當(dāng)前容量百分比 |
| S0CMX | 年輕代中第一個survivor區(qū)的最大容量 (字節(jié)) |
| S1CMX | 年輕代中第二個survivor區(qū)的最大容量 (字節(jié)) |
| ECMX | 年輕代中Eden的最大容量 (字節(jié)) |
| DSS | 當(dāng)前需要survivor區(qū)的容量 (字節(jié))(Eden區(qū)已滿) |
| TT | 持有次數(shù)限制 |
| MTT | 最大持有次數(shù)限制 |
jstatd?啟動jvm?監(jiān)控服務(wù) 它是一個基于?rmi的應(yīng)用,向遠(yuǎn)程機(jī)器提供本機(jī)?jvm應(yīng)用程序的信息。默認(rèn)端口?1099。 ? $ jstatd -J-Djava.security.policy=my.policy
my.policy文件需要自己建立,是安全策略文件,因為?jdk對?jvm做了?jaas的安全檢測,所以我們必須設(shè)置一些策略,使?jstatd被允許作網(wǎng)絡(luò)操作,內(nèi)容如下:
| grant codebase "?file:$JAVA_HOME/lib/tools.jar?" {? ? permission java.security.AllPermission;}; |
二、jmap查看各個代的內(nèi)存使用 jmap?可以從?core文件或進(jìn)程中獲得內(nèi)存的具體匹配情況,包括?Heap size, Perm size等等。
jmap命令格式: ??? ?jmap [ option ] <pid> | <executable core> | <[server-id@]remote-hostname-or-IP>
1)參數(shù)說明?? pid:java進(jìn)程?id executable:產(chǎn)生?core dump的?java可執(zhí)行程序 core:core dump文件 remote-hostname-or-IP:遠(yuǎn)程?debug服務(wù)的主機(jī)名或?ip server-id:遠(yuǎn)程?debug服務(wù)的?id?
2)?option參數(shù): -heap? 打印heap的概要信息,GC?使用的算法,heap的配置及使用情況?.
-histo[:live]? 打印jvm heap?的直方圖。輸出類名、每個類的實例數(shù)目、對象占用大小。?VM的內(nèi)部類名字開頭會加上前綴?”*”.? 如果加上live?則只統(tǒng)計活的對象數(shù)量。
-dump:[live,]format=b,file=<filename>? 使用hprof二進(jìn)制形式,導(dǎo)出heap?內(nèi)容到文件filename。 假如指定live?選項,那么只輸出活的對象到文件?.?
-finalizerinfo? 打印正等候回收的對象的信息?.
-permstat? 打印classload?和jvm heap?持久代的信息。 包含每個classloader?的名字、是否存活、地址、父?classloade、加載的?class數(shù)量、內(nèi)部?String的數(shù)量和占用內(nèi)存數(shù)。
-F 當(dāng)pid沒有響應(yīng)的時候,與-dump或者?-histo共同使用,強(qiáng)制生成?dump文件或?histo信息?.?在這個模式下?,live子參數(shù)無效?.?
-J 傳遞參數(shù)給啟動jmap?的jvm. 64位機(jī)上使用需要使用如下方式:?jmap -J-d64 -heap pid
使用??jmap -heap pid?,可以查看各個代的內(nèi)存使用情況。
| $ jmap -heap 2083 |
| $ jmap -dump:format=b,file=heapdump.hprof <pid> |
| $ jmap -histo 2083 | jmap -histo:live 2083 |
jmap輸出的?class name結(jié)果中: [C is a char[] [S is a short[] [I is a int[] [B is a byte[] [[I is a int[][]
heap輸出實例 $ jmap -heap 12264
| JVM version is 25.65-b01 using parallel threads in the new generation. using thread-local object allocation. Concurrent Mark-Sweep GC Heap Configuration: ?? MinHeapFreeRatio???????? = 40 ?? MaxHeapFreeRatio???????? = 70 ?? MaxHeapSize????????????? = 8388608000 (8000.0MB) ?? NewSize????????????????? = 2006515712 (1913.5625MB) ?? MaxNewSize?????????????? = 2006515712 (1913.5625MB) ?? OldSize????????????????? = 90636288 (86.4375MB) ?? NewRatio???????????????? = 2 ?? SurvivorRatio??????????? = 8 ?? MetaspaceSize??????????? = 21807104 (20.796875MB) ?? CompressedClassSpaceSize = 1073741824 (1024.0MB) ?? MaxMetaspaceSize???????? = 17592186044415 MB ?? G1HeapRegionSize???????? = 0 (0.0MB) Heap Usage: New Generation (Eden + 1 Survivor Space): ?? capacity = 1805910016 (1722.25MB) ?? used???? = 788045040 (751.5383148193359MB) ?? free???? = 1017864976 (970.7116851806641MB) ?? 43.637004779755316% used Eden Space: ?? capacity = 1605304320 (1530.9375MB) ?? used???? = 630378472 (601.1757583618164MB) ?? free???? = 974925848 (929.7617416381836MB) ?? 39.26847166274367% used From Space: ?? capacity = 200605696 (191.3125MB) ?? used???? = 157666568 (150.36255645751953MB) ?? free???? = 42939128 (40.94994354248047MB) ?? 78.59525982751757% used To Space: ?? capacity = 200605696 (191.3125MB) ?? used???? = 0 (0.0MB) ?? free???? = 200605696 (191.3125MB) ?? 0.0% used concurrent mark-sweep generation: ?? capacity = 6382092288 (6086.4375MB) ?? used???? = 4612472232 (4398.79630279541MB) ?? free???? = 1769620056 (1687.6411972045898MB) ?? 72.27210174745753% used 18841 interned Strings occupying 1633048 bytes. |
jmap?相關(guān)工具 ? jmap dump生成的?heap dump文件,可以使用?IBM HeapAnalyzer分析工具分析 ? 下載: https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091
? 運(yùn)行:java –Xmx800m –jar ha456.jar
三、jstack和?jinfo分析java core文件 jstack工具可以用來獲得?core文件的?java stack和?native stack的信息,從而可以知道?java程序是如何崩潰和在程序何處發(fā)生問題。 另外,jstack?工具還可以附屬到正在運(yùn)行的?java程序中,看到?java程序的?java stack和native stack?的信息,如果現(xiàn)在運(yùn)行的?java程序呈現(xiàn)?hung的狀態(tài),?jstack是非常有用的。 命令格式:$ jstack pid
jinfo可以從?core文件里面知道崩潰的?Java應(yīng)用程序的配置信息。 命令額格式:$ jinfo pid
總結(jié)
以上是生活随笔為你收集整理的Java内存使用情况查看工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解 Java G1 垃圾收集器GC
- 下一篇: [译]GC专家系列1:理解Java垃圾回