jmap分析tomcat,jar包内存
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题:
OutOfMemoryError,内存不足
内存泄露
线程死锁
锁争用(Lock Contention)
Java进程消耗CPU过高
jmap 详解
分析java application的内存使用时,jmap是一个很实用的轻量级工具。使用jmap可以查看heap空间的概要情况,粗略的掌握heap的使用情况。也可以生成heapdump文件,再使用jhat通过web浏览器具体分析内容中的对象和数据。
jmap是JDK自带的一个工具,非常小巧方便,其支持参数如下:
-heap 打印heap空间的概要,这里可以粗略的检验heap空间的使用情况。
以上的输出很简单,第四行起开始输出此进程的JAVA使用的环境。
Heap Configuration:指java应用启动时设置的JVM参数。像最大使用内存大小,年老代,年青代,持久代大小等。
Heap Usage:当时的heap实际使用情况。包括新生代、老生代和持久代。
其中新生代包括:Eden区的大小、已使用大小、空闲大小及使用率。Survive区的From和To同样。
有这个可以很简单的查看本进程的内存使用情况。
可以用于分析堆内存分区大小是否合理,新生代和老生代的大小分配是否合适等。
也许进程占用的总内存比较多,但我们在这里可以看到真正用到的并没有多少,很多都是”Free”。内存使用的堆积大多在老年代,内存池露始于此,所以要格外关心“Old Generation”。
[root@qudaodev ~]# jmap -heap 4956 #提示 jmap -heap PID (jar,war,tomcat 的pid) Attaching to process ID 4956, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.60-b23 using parallel threads in the new generation. using thread-local object allocation. Concurrent Mark-Sweep GC Heap Configuration: 指java应用启动时设置的JVM参数。像最大使用<strong>内存</strong>大小,年老代,年青代,持久代大小等。 MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 1073741824 (1024.0MB) NewSize = 89456640 (85.3125MB) MaxNewSize = 357892096 (341.3125MB) OldSize = 178978816 (170.6875MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: 当时的heap实际使用情况。包括新生代、老生代和持久代。 New Generation (Eden + 1 Survivor Space): capacity = 80543744 (76.8125MB) used = 34983656 (33.363014221191406MB) free = 45560088 (43.449485778808594MB) 43.43435537339809% used Eden Space: capacity = 71630848 (68.3125MB) used = 30500632 (29.087669372558594MB) free = 41130216 (39.224830627441406MB) 42.58030283265668% used From Space: capacity = 8912896 (8.5MB) used = 4483024 (4.2753448486328125MB) free = 4429872 (4.2246551513671875MB) 50.2981746897978% used To Space: capacity = 8912896 (8.5MB) used = 0 (0.0MB) free = 8912896 (8.5MB) 0.0% used concurrent mark-sweep generation: capacity = 178978816 (170.6875MB) used = 40374160 (38.50379943847656MB) free = 138604656 (132.18370056152344MB) 22.558066313278104% used 29200 interned Strings occupying 3331592 bytes.