国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

jmap,jhat分析內存

2019-11-14 21:21:12
字體:
來源:轉載
供稿:網友
jmap,jhat分析內存

分析java application的內存使用時,jmap是一個很實用的輕量級工具。使用jmap可以查看heap空間的概要情況,粗略的掌握heap的使用情況。也可以生成heapdump文件,再使用jhat通過web瀏覽器具體分析內容中的對象和數據。


jmap是JDK自帶的一個工具,非常小巧方便,其支持參數如下:

-heap 打印heap空間的概要,這里可以粗略的檢驗heap空間的使用情況。

jmap -heap PID

fs@inspur92:~/test/llxdata/081005/tmp$ jmap -heap 30774Attaching to PRocess ID 30774, please wait...Debugger attached successfully.Server compiler detected.JVM version is 20.1-b02using thread-local object allocation.Parallel GC with 8 thread(s)Heap Configuration:   MinHeapFreeRatio = 40   MaxHeapFreeRatio = 70   MaxHeapSize      = 1073741824 (1024.0MB)   NewSize          = 1310720 (1.25MB)   MaxNewSize       = 17592186044415 MB   OldSize          = 5439488 (5.1875MB)   NewRatio         = 2   SurvivorRatio    = 8   PermSize         = 21757952 (20.75MB)   MaxPermSize      = 268435456 (256.0MB)Heap Usage:PS Young GenerationEden Space:   capacity = 353107968 (336.75MB)   used     = 9083624 (8.662818908691406MB)   free     = 344024344 (328.0871810913086MB)   2.572477775409475% usedFrom Space:   capacity = 2359296 (2.25MB)   used     = 0 (0.0MB)   free     = 2359296 (2.25MB)   0.0% usedTo Space:   capacity = 2359296 (2.25MB)   used     = 0 (0.0MB)   free     = 2359296 (2.25MB)   0.0% usedPS Old Generation   capacity = 715849728 (682.6875MB)   used     = 47522208 (45.320709228515625MB)   free     = 668327520 (637.3667907714844MB)   6.638573172720407% usedPS Perm Generation   capacity = 40435712 (38.5625MB)   used     = 40067528 (38.21137237548828MB)   free     = 368184 (0.35112762451171875MB)   99.08945834810575% used

以上的輸出很簡單,第四行起開始輸出此進程的JAVA使用的環境

Heap Configuration:指java應用啟動時設置的JVM參數。像最大使用內存大小,年老代,年青代,持久代大小等。

Heap Usage:當時的heap實際使用情況。包括新生代、老生代和持久代。

其中新生代包括:Eden區的大小、已使用大小、空閑大小及使用率。Survive區的From和To同樣。

有這個可以很簡單的查看本進程的內存使用情況。

可以用于分析堆內存分區大小是否合理,新生代和老生代的大小分配是否合適等。

也許進程占用的總內存比較多,但我們在這里可以看到真正用到的并沒有多少,很多都是"Free"。內存使用的堆積大多在老年代,內存池露始于此,所以要格外關心“Old Generation”。


jmap -histo PID

這里會生成一個類的統計報表,此表非常簡單,如顯示什么類有多少個實例,共占了多少字節等。如下:

fs@inspur92:~/test/llxdata/081005/tmp$ jmap -histo 30774

num #instances #bytes class name ---------------------------------------------- 1: 12077 37306240 [I 2: 8404 8913528 [B 3: 55627 8311744 <constMethodKlass> 4: 55627 7576152 <methodKlass> 5: 35982 6771360 [C 6: 4838 5536240 <constantPoolKlass> 7: 88849 4696992 <symbolKlass> 8: 4838 3735856 <instanceKlassKlass> 9: 4024 3334976 <constantPoolCacheKlass> 10: 4600 2201648 <methodDataKlass> 11: 35011 1120352 java.lang.String 12: 5286 549744 java.lang.Class 13: 6509 441272 [S 14: 7454 392128 [[I

其中關于I、B、C等的說明如下 Table 4.2.

BaseType CharacterTypeInterpretation
Bbytesigned byte
CcharUnicode character
Ddoubledouble-precision floating-point value
Ffloatsingle-precision floating-point value
Iintinteger
Jlonglong integer
L<classname>;referencean instance of class de><classname>de>
Sshortsigned short
Zbooleande>truede> or de>falsede>
[ referenceone array dimension


jmap -permstat

打印一些持久代上的內存使用狀態,有“活”的,有“死”的。

class_loader classes bytes parent_loader alive? type <bootstrap> 2099 12780072 null live <internal> 0x00000000c069dc58 1 1968 0x00000000c017e968 dead sun/reflect/DelegatingClassLoader@0x00000000b00685b0 0x00000000c05c37d8 1 2008 0x00000000c017e968 dead sun/reflect/DelegatingClassLoader@0x00000000b00685b0 0x00000000c069d900 1 1968 0x00000000c017e968 dead sun/reflect/DelegatingClassLoader@0x00000000b00685b0

不常用。


-heap:format=b

產生一個HeapDump文件,此為生成heapdump文件的重要參數。 例:jmap -heap:format=b 2657 會產生一個heap.bin的heapdump文件。 需要注意的是,此生成heapdump的參數為JDK1.5,在1.6中的格式為: jmap -dump:live,format=b,file=xxx 2657 這里更加強大一些,可以指定是存活的對象,還有生成heapdump的文件名。

當被測應用使用內容較大時(4G以上),dump需要花費較長時間,很可能導致dump失敗。

dump下來的文件結合jhat進行分析會更方便。


jhat

jhat是一個Java堆復制瀏覽器。這個工具分析Java堆復制文件(例如,由上面的"jmap -dump"所產生的)。Jhat啟動一個允許堆中的對象在web瀏覽器中進行分析的web服務器。這個工具并不是想用于應用系統中而是用于"離線"分析。"jhat工具是平臺獨立的",其意思是,它可以被用來觀察在任何平臺上所產生的堆復制。例如,我們有可能在linux系統上使用jhat來觀察一個 在Solaris OS上所產生的堆復制。把本機的java內存映像導出到heap.dmp中,其中PID為java進程的ID號。 jmap -dump:live,format=b,file=heap.dmp PID導出后的映像文件可以用jhat來進行分析,-J是向java虛擬機傳一個參數,如-mx768m是指定虛擬機可用最大的內存為768M。如果映像文件很大,你要指定一個很大的值,否則在分析過程中就會有OutOfMemeryError的錯誤。

jhat -J-mx768m -port <端口號:默認為7000> heap.dmp

文章轉自:http://liulinxia02.blog.163.com/blog/static/26868772009111861834942/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东乌珠穆沁旗| 安溪县| 九龙坡区| 冕宁县| 德惠市| 英德市| 板桥市| 朝阳市| 南昌县| 池州市| 玛纳斯县| 萍乡市| 苏尼特右旗| 新泰市| 永新县| 长丰县| 乌兰浩特市| 芒康县| 独山县| 石渠县| 晋中市| 晴隆县| 寿光市| 西乌| 永兴县| 昔阳县| 江永县| 沿河| 通许县| 陕西省| 西盟| 济阳县| 镇原县| 新沂市| 金门县| 大丰市| 铜陵市| 扶余县| 崇礼县| 鹤庆县| 揭东县|