Java内存分析工具
这段时间单机跑一个大java,总是出现Heap OutOfMemory,无奈了,于是搜了下java自带的内存分析工具,算是初学了,记录一下,主要包括jmap, jstat, jps, jconsole,看不懂的可以参考我之前写的一篇关于java内存管理的文章。
jmap
打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。
例1:堆使用情况
jmap -heap 22677 | more
Attaching to process ID 22677, please wait…
Debugger attached successfully.
Server compiler detected.
JVM version is 1.5.0_15-b04
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 6442450944 (6144.0MB)
NewSize = 2686976 (2.5625MB)
MaxNewSize = -65536 (-0.0625MB)
OldSize = 1835008 (1.75MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 88080384 (84.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 854327296 (814.75MB)
used = 854327296 (814.75MB)
free = 0 (0.0MB)
100.0% used
From Space:
capacity = 642121728 (612.375MB)
used = 0 (0.0MB)
free = 642121728 (612.375MB)
0.0% used
To Space:
capacity = 646578176 (616.625MB)
used = 0 (0.0MB)
free = 646578176 (616.625MB)
0.0% used
PS Old Generation
capacity = 4294967296 (4096.0MB)
used = 4294967296 (4096.0MB)
free = 0 (0.0MB)
100.0% used
PS Perm Generation
capacity = 21757952 (20.75MB)
used = 14759800 (14.076042175292969MB)
free = 6998152 (6.673957824707031MB)
67.8363478327372% use
例2:堆的快照
jmap -histo 22677 > out
jstat
一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
例3:GC情况
[work@db-beidou-rd02.db01.baidu.com bin]$ jstat -gccapacity 22677
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
349504.0 2097152.0 2097152.0 627072.0 631424.0 834304.0 699072.0 4194304.0 4194304.0 4194304.0 21248.0 86016.0 21248.0 21248.0 72 55
例4:GC情况,每隔5秒钟打印一次
jstat -gcutil 22677 5000 (5秒打印一次)
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 100.00 100.00 67.84 72 42.522 49 690.569 733.091
0.00 0.00 100.00 100.00 67.84 72 42.522 50 705.612 748.134
0.00 0.00 100.00 100.00 67.84 72 42.522 50 705.612 748.134
0.00 0.00 100.00 100.00 67.84 72 42.522 50 705.612 748.134
0.00 0.00 100.00 100.00 67.84 72 42.522 51 720.629 763.151
0.00 0.00 100.00 100.00 67.84 72 42.522 51 720.629 763.151
0.00 0.00 100.00 100.00 67.84 72 42.522 51 720.629 763.151
0.00 0.00 100.00 100.00 67.84 72 42.522 52 735.667 778.189
0.00 0.00 100.00 100.00 67.84 72 42.522 52 735.667 778.189
0.00 0.00 100.00 100.00 67.84 72 42.522 52 735.667 778.189
S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
jps
与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。
例5:查看系统有多少java在运行
[work@db-beidou-rd02.db01.baidu.com bin]$ jps
22677 SiteUsercountUtility
26038 Jps
jconsole
一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。