在日常的java開發中,總會出現內存溢出或者CPU過高的情況,這個時候就需要我們使用一些工具來分析具體的問題,下面簡單羅列一下經常使用到的一些.
1.jmap
使用top命令查詢pid
jmap命令可以幫助我們分析jvm的堆棧信息
jmap -heap pid
對上面的參數做簡單的解釋:
Heap Configuration: ##堆配置情況,也就是JVM參數配置的結果[平常說的tomcat配置JVM參數,就是在配置這些]
MinHeapFreeRatio = 0 ##最小堆使用比例
MaxHeapFreeRatio = 100 ##最大堆可用比例
MaxHeapSize = 2147483648 (2048.0MB) ##最大堆空間大小
NewSize = 715653120 (682.5MB) ##新生代分配大小
MaxNewSize = 715653120 (682.5MB) ##最大可新生代分配大小
OldSize = 5439488 (5.1875MB) ##老年代大小
NewRatio = 2 ##新生代比例
SurvivorRatio = 8 ##新生代與suvivor的比例
PermSize = 134217728 (128.0MB) ##perm區 永久代大小
MaxPermSize = 134217728 (128.0MB) ##最大可分配perm區 也就是永久代大小
Heap Usage: ##堆使用情況【堆內存實際的使用情況】
New Generation (Eden + 1 Survivor Space): ##新生代(伊甸區Eden區 + 倖存區survior(1+2)空間)
capacity = 241631232 (230.4375MB) ##伊甸區容量
used = 77776272 (74.17323303222656MB) ##已經使用大小
free = 163854960 (156.26426696777344MB) ##剩餘容量
32.188004570534986% used ##使用比例
Eden Space: ##伊甸區
capacity = 214827008 (204.875MB) ##伊甸區容量
used = 74442288 (70.99369812011719MB) ##伊甸區使用
free = 140384720 (133.8813018798828MB) ##伊甸區當前剩餘容量
34.65220164496263% used ##伊甸區使用情況
From Space: ##survior1區
capacity = 26804224 (25.5625MB) ##survior1區容量
used = 3333984 (3.179534912109375MB) ##surviror1區已使用情況
free = 23470240 (22.382965087890625MB) ##surviror1區剩餘容量
12.43827838477995% used ##survior1區使用比例
To Space: ##survior2 區
capacity = 26804224 (25.5625MB) ##survior2區容量
used = 0 (0.0MB) ##survior2區已使用情況
free = 26804224 (25.5625MB) ##survior2區剩餘容量
0.0% used ## survior2區使用比例
PS Old Generation: ##老年代使用情況
capacity = 1879048192 (1792.0MB) ##老年代容量
used = 30847928 (29.41887664794922MB) ##老年代已使用容量
free = 1848200264 (1762.5811233520508MB) ##老年代剩餘容量
1.6416783843721663% used ##老年代使用比例
Perm Generation: ##永久代使用情況
capacity = 134217728 (128.0MB) ##perm區容量
used = 47303016 (45.111671447753906MB) ##perm區已使用容量
free = 86914712 (82.8883285522461MB) ##perm區剩餘容量
35.24349331855774% used ##perm區使用比例
2. jstat
1.垃圾回收統計
jstat -gc pid
S0C:第一個倖存區的大小
S1C:第二個倖存區的大小
S0U:第一個倖存區的使用大小
S1U:第二個倖存區的使用大小
EC:伊甸園區的大小
EU:伊甸園區的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法區大小
MU:方法區使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC:年輕代垃圾回收次數
YGCT:年輕代垃圾回收消耗時間
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間
2.堆內存統計
jstat -gccapacity pid
3.新生代內存統計
jstat -gcnewcapacity pid
其他的OPTIONS可以參考下面的備註