jvm內存堆棧監控之jmap篇
阿新 • • 發佈:2018-04-22
jvm內存堆棧監控之jmap篇jmap命令可以獲得運行中的jvm的堆的快照,從而可以離線分析堆,以檢查內存泄漏,檢查一些嚴重影響性能的大對象的創建,檢查系統中什麽對象最多,各種對象所占內存的大小等等
輸出內容:
jmap -histo 3409 | jmap -histo:live 3409
可以觀察heap中所有對象的情況(heap中所有生存的對象的情況)。包括對象數量和所占空間大小。
輸出內容:
寫個腳本,可以很快把占用heap最大的對象找出來,對付內存泄漏特別有效。
jmap (linux下特有,也是很常用的一個命令)
觀察運行中的jvm物理內存的占用情況。
參數如下:
-heap :打印jvm heap的情況
-histo: 打印jvm heap的直方圖。其輸出信息包括類名,對象數量,對象占用大小。
-histo:live : 同上,但是只答應存活對象的情況
-permstat: 打印permanent generation heap情況
命令使用:
jmap -heap 3409
可以觀察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的內存使用情況
jmap -histo 3409 | jmap -histo:live 3409
可以觀察heap中所有對象的情況(heap中所有生存的對象的情況)。包括對象數量和所占空間大小。
輸出內容:
寫個腳本,可以很快把占用heap最大的對象找出來,對付內存泄漏特別有效。
如果結果很多,可以用以下命令輸出到文本文件。
jmap -histo 3409 | jmap -histo:live 3409 > a.txt
常用選項:
-dump:format=b,file=<filename> pid # dump堆到文件,format指定輸出格式,live指明是活著的對象,file指定文件名 -finalizerinfo # 打印等待回收對象的信息 -heap # 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情況,可以用此來判斷內存目前的使用情況以及垃圾回收情況 -histo[:live] # 打印堆的對象統計,包括對象數、內存大小等等 (因為在dump:live前會進行full gc,因此不加live的堆大小要大於加live堆的大小 ) -permstat # 打印classload類裝載器和 jvm heap長久層的信息. 包含包括每個裝載器的名字,活躍,地址,父裝載器,和其總共加載的類大小。另外,內部String的數量和占用內存數也會打印出來. -F # 強制,強迫.在pid沒有相應的時候使用-dump或者-histo參數. 在這個模式下,live子參數無效. -J # 傳遞參數給jmap啟動的jvm. ,如:-J-Xms256m
實例:
Jmap
[root@tomcat01 ~]# jmap 13614
Attaching to process ID 13614, please wait... Debugger attached successfully. Server compiler detected. JVM version is 24.55-b03 0x0000000000400000 7K /aliyun/java-1.7.0/bin/java 0x0000003666400000 91K /lib64/libgcc_s-4.4.7-20120601.so.1 0x0000003d7e400000 153K /lib64/ld-2.12.so 0x0000003d7ec00000 1881K /lib64/libc-2.12.so 0x0000003d7f000000 142K /lib64/libpthread-2.12.so 0x0000003d7f400000 22K /lib64/libdl-2.12.so 0x0000003d7f800000 46K /lib64/librt-2.12.so 0x0000003d7fc00000 585K /lib64/libm-2.12.so 0x0000003d80c00000 111K /lib64/libresolv-2.12.so 0x0000003d82000000 461K /lib64/libfreebl3.so 0x0000003d83000000 42K /lib64/libcrypt-2.12.so 0x00007f42de29b000 257K /aliyun/java-1.7.0/jre/lib/amd64/libjpeg.so 0x00007f42de4d6000 477K /aliyun/java-1.7.0/jre/lib/amd64/libt2k.so 0x00007f42de755000 512K /aliyun/java-1.7.0/jre/lib/amd64/libfontmanager.so 0x00007f42de9ce000 36K /aliyun/java-1.7.0/jre/lib/amd64/headless/libmawt.so 0x00007f42debd5000 755K /aliyun/java-1.7.0/jre/lib/amd64/libawt.so 0x00007f43047d4000 26K /lib64/libnss_dns-2.12.so 0x00007f4304f2b000 250K /aliyun/java-1.7.0/jre/lib/amd64/libsunec.so 0x00007f4305172000 774K /aliyun/apr/lib/libapr-1.so.0.5.0 0x00007f43053a4000 658K /usr/local/apr/lib/libtcnative-1.so.0.1.34 0x00007f43055bc000 44K /aliyun/java-1.7.0/jre/lib/amd64/libmanagement.so 0x00007f4305ac4000 112K /aliyun/java-1.7.0/jre/lib/amd64/libnet.so 0x00007f4305cdb000 89K /aliyun/java-1.7.0/jre/lib/amd64/libnio.so 0x00007f432840d000 120K /aliyun/java-1.7.0/jre/lib/amd64/libzip.so 0x00007f4328628000 64K /lib64/libnss_files-2.12.so 0x00007f432883e000 214K /aliyun/java-1.7.0/jre/lib/amd64/libjava.so 0x00007f4328a69000 63K /aliyun/java-1.7.0/jre/lib/amd64/libverify.so 0x00007f4328cf8000 14786K /aliyun/java-1.7.0/jre/lib/amd64/server/libjvm.so 0x00007f4329b61000 103K /aliyun/java-1.7.0/lib/amd64/jli/libjli.so
jhat也可以監控jvm
可以參考如下博文:
https://www.cnblogs.com/myna/p/7590620.html
jvm內存堆棧監控之jmap篇