使用jmap dump 分析JVM内存状态

查看整个JVM内存状态 

jmap -heap [pid]
要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致 Java 进程挂起

imac:~ xdcoder$ jmap -heap 783
Attaching to process ID 783, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.101-b13

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 4294967296 (4096.0MB)
   NewSize                  = 89128960 (85.0MB)
   MaxNewSize               = 1431306240 (1365.0MB)
   OldSize                  = 179306496 (171.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:堆栈使用情况
PS Young Generation
Eden Space:
   capacity = 67108864 (64.0MB)
   used     = 19526232 (18.621665954589844MB)
   free     = 47582632 (45.378334045410156MB)
   29.09635305404663% used
From Space:
   capacity = 11010048 (10.5MB)
   used     = 5619728 (5.3593902587890625MB)
   free     = 5390320 (5.1406097412109375MB)
   51.04181198846726% used
To Space:
   capacity = 11010048 (10.5MB)
   used     = 0 (0.0MB)
   free     = 11010048 (10.5MB)
   0.0% used
PS Old Generation
   capacity = 179306496 (171.0MB)
   used     = 32768 (0.03125MB)
   free     = 179273728 (170.96875MB)
   0.01827485380116959% used

4904 interned Strings occupying 388552 bytes.


查看JVM堆中对象详细占用情况

jmap -histo [pid]

imac:~ xdcoder$ jmap -histo 783

 num     #instances         #bytes  class name
----------------------------------------------
   1:        286511        9516456  [Ljava.lang.Object;
   2:        113692        9458248  [C
   3:         31510        6249248  [B
   4:        132529        4240928  java.io.ObjectStreamClass$WeakClassKey
   5:         95868        3834720  java.util.TreeMap$Entry
   6:         14097        3740048  [I
   7:         60312        1447488  java.lang.String
   8:         25273        1213104  java.util.HashMap
   9:         46425        1114200  java.lang.Long
  10:         10056        1045824  java.io.ObjectStreamClass
  11:         10429         500592  java.util.TreeMap
  12:          7332         470824  [Ljava.util.Hashtable$Entry;
  13:         14637         468384  java.util.Vector
  14:          4609         442464  java.lang.management.ThreadInfo
  15:         12704         406528  java.util.TreeMap$KeyIterator
  16:         15719         377256  java.io.SerialCallbackContext
  17:          7325         351600  java.util.Hashtable

导出整个JVM 中内存信息

jmap -dump:format=b,file=文件名 [pid]

jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆DUMP 文件的工具,基于此工具可分析JVM HEAP 中对象的内存占用情况
jhat -J-Xmx1024M [file]
执行后等待console 中输入start HTTP server on port 7000 即可使用浏览器访问 IP:7000

eclipse Memory Analyzer
Eclipse 提供的一个用于分析JVM 堆Dump文件的插件。借助这个插件可查看对象的内存占用状况,引用关系,分析内存泄露等。
http://www.eclipse.org/mat/


终止线程活动

kill -3 [pid]
在Linux 上找到Java所在的进程号,然后执行以上命令,线程的相关信息就输出到console


查看堆栈信息

jstack 是sun JDK 自带的工具,通过该工具可以看到JVM 中线程的运行状况,包括锁等待,线程是否在运行
执行 jstack [pid] ,线程的所有堆栈信息, 包括死锁进程

使用jmap dump 分析JVM内存状态_第1张图片



你可能感兴趣的:(Java并发,Java并发合集,java并发,jvm)