1.jmap -heap 11649(pid)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 85983232 (82.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 536870912 (512.0MB)
used = 257754456 (245.81380462646484MB)
free = 279116456 (266.18619537353516MB)
48.010508716106415% used
From Space:
capacity = 89456640 (85.3125MB)
used = 0 (0.0MB)
free = 89456640 (85.3125MB)
0.0% used
To Space:
capacity = 89456640 (85.3125MB)
used = 0 (0.0MB)
free = 89456640 (85.3125MB)
0.0% used
PS Old Generation
capacity = 1431699456 (1365.375MB)
used = 0 (0.0MB)
free = 1431699456 (1365.375MB)
0.0% used
PS Perm Generation
capacity = 37683200 (35.9375MB)
used = 37510984 (35.77326202392578MB)
free = 172216 (0.16423797607421875MB)
99.54298997961956% used
3.
在一次解决系统tomcat老是内存撑到头,然后崩溃的问题时,使用到了jmap。
1 使用命令
在环境是linux+jdk1.5以上,这个工具是自带的,路径在JDK_HOME/bin/下
jmap -histo pid > a.log
2 输出结果摘要
Size Count Class description
-------------------------------------------------------
353371288 9652324 char[]
230711112
9612963 java.lang.String
139347160 114865 byte[]
76128096 3172004 java.util.Hashtable$Entry
75782280
3157595
com.test.util.IPSeeker$IPLocation
25724272 9115 java.util.Hashtable$Entry[]
9319968 166428 org.apache.tomcat.util.buf.MessageBytes
8533856 32889 int[]
发现有大量的String和自定义对象com.test.util.IPSeeker$IPLocation存在,检查程序发现此处果然存在内存溢