设置堆内存大小_jmap和jhat命令行工具的配合使用,更好的掌握堆内存状况
Java的內存映像工具,jmap,Memory Map for Java,用于生成堆轉儲快照,一般成為heapdump或者dump文件,出了獲取dump文件,這個工具還可以查詢finalize執行隊列,Java堆和永久代的詳細信息,如空間使用率、當前使用的是哪種收集器等。
先來看一下這個命令是怎么用的:
由此可見jmap的命令格式為:jmap [option]
option參數為:
no option: 查看進程的內存映像信息,類似 Solaris pmap 命令。heap: 顯示Java堆詳細信息histo[:live]: 顯示堆中對象的統計信息clstats:打印類加載器信息finalizerinfo: 顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象dump::生成堆轉儲快照F: 當-dump沒有響應時,使用-dump或者-histo參數. 在這個模式下,live子參數無效.help:打印幫助信息J:指定傳遞給運行jmap的JVM的參數1、jmap -heap pid,顯示Java堆詳細信息,包括使用的GC算法、堆配置信息和各內存區域內存使用信息
2、jmap -histo:live pid,顯示堆中對象的統計信息,如果指定了live子選項,則只計算活動的對象。
打印的統計信息如下(包括每個Java類、對象數量、內存大小(單位:字節)、完全限定的類名):
3、jmap -clstats pid,打印類加載器信息
-clstats是-permstat的替代方案,在JDK8之前,-permstat用來打印類加載器的數據,打印Java堆內存的永久保存區域的類加載器的智能統計信息。
4、jmap -finalizerinfo pid,打印等待終結的對象信息
5、jmap -dump: pid,生成堆轉儲快照dump文件
以hprof二進制格式轉儲Java堆到指定filename的文件中。live子選項是可選的。如果指定了live子選項,堆中只有活動的對象會被轉儲。想要瀏覽heap dump,你可以使用jhat(Java堆分析工具)讀取生成的文件,我們先來生成這個文件:
生成了這個堆轉儲快照,接下來就到了jhat命令行工具的使用了,jhat是虛擬機堆轉儲快照分析工具,該命令與jmap配合使用,來分析jmap生成的堆轉儲快照,是對好基友。jhat內置了一個微型的HTTP/HTML服務器,生成dump文件的分析結果后,可以在瀏覽器中查看。
注意:一般在生成環境中,不使用jhat命令行工具在部署服務器上直接來分析堆轉儲快照,因為分析堆轉儲快照是一個耗時且消耗硬件資源的過程,還有就是jhat的分析功能相對來說比較簡陋,有比jhat更為先進的工具,例如EMA,IBM HA等,都是更強大更專業的分析功能。
先來看一下它的使用方法:
這些可選擇的選項含義是:
-J 將運行時參數傳遞給運行jhat的JVM。例如,-J-Xmx512m設置使用的最大堆內存大小為512MB。-stack false/true關閉跟蹤對象分配調用堆棧。注意,如果heap dump中的分配位置信息不可用,你必須設置此標識為false。此選項的默認值為true。-refs false/true關閉對象的引用跟蹤。默認為true。默認情況下,反向指針(指向給定對象的對象,又叫做引用或外部引用)用于計算堆中的所有對象.-port port-number設置jhat的HTTP服務器的端口號。默認為7000。-exclude exclude-file指定一個數據成員列表的文件,這些數據成員將被排除在”reachable objects”查詢的范圍之外。舉個例子,如果文件列有java.lang.String.value,那么,當計算指定對象”o”的可達對象列表時,涉及到java.lang.String.value字段的引用路徑將會被忽略掉。-baseline baseline-dump-file指定一個基線heap dump。在兩個heap dump(當前heap dump和基線heap dump)中存在相同對象ID的對象,不會被標記為”new”。其他的對象將被標記為”new”。這在比較兩個不同的heap dump時非常有用。-debug int設置此工具的調試級別。0意味著沒有調試輸出。設置的值越高,輸出的信息就越詳細。-version 報告版本號并退出。-h|-help輸出幫助信息并退出。輸入命令來分析剛才生成的堆轉儲文件:
打開瀏覽器來訪問,端口為默認的7000:
在這個頁面的最下方,有個Other Queries,點擊不同的鏈接可以展示不同的內容:
比如我們點擊“Show heap histogram” 鏈接,展示堆快照直方圖:
這些JDK自帶的工具,給予我們分析和排查問題帶來了極大的方便,掌握這些工具,或者其他更強大和更完美的工具,讓我們分析線上問題的時候,不再手足無措。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的设置堆内存大小_jmap和jhat命令行工具的配合使用,更好的掌握堆内存状况的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyCharm第三方插件下载---pyg
- 下一篇: websocket使用