8.5 JVM命令行监控——jmap

1. jmap描述

jmap全称jvm memory map,该命令有两个作用:第一个是可以获取堆dump文件,dump文件是堆转储快照的二进制文件文件;第二还可以获取堆的使用情况、堆中对象统计信息以及类加载信息等。

2. jmap用法

2.1 导出dump文件

命令:jmap -dump:format=b, file=文件名 pid 或者 jmap -dump:live,format=b,file=文件名 pid
其中第一条命令表示导出堆中所有对象的dump文件,第二条命令表示只导出存活对象的dump文件。通常Heap dump文件时都会触发一次FULL GC,所以dump文件中都是保存的FULL GC后的对象信息。

E:\study\tool\javaSE1.8\jdk1.8\bin>jmap -dump:live,format=b,file=d:\dump 9712
Dumping heap to D:\dump ...
Heap dump file created

另外除上述方式外,还可以在JVM启动时设置参数,当发生OOM异常时自动生成dump文件,需设置的JVM参数为:-XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=文件名

2.2 输出堆内存信息

2.2.1 输出堆空间使用信息

命令:jmap -heap pid输出堆空间的详细信息,包括GC的使用情况、堆配置信息以及内存的使用信息等。

E:\study\tool\javaSE1.8\jdk1.8\bin>jmap -heap 9712 > d:\test1

test1文件内容如下所示,列举出了堆空间配置信息以及使用情况。

Attaching to process ID 9712, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.31-b07

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

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 3187671040 (3040.0MB)
   NewSize                  = 66060288 (63.0MB)
   MaxNewSize               = 1062207488 (1013.0MB)
   OldSize                  = 133169152 (127.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 = 50331648 (48.0MB)
   used     = 0 (0.0MB)
   free     = 50331648 (48.0MB)
   0.0% used
From Space:
   capacity = 7864320 (7.5MB)
   used     = 0 (0.0MB)
   free     = 7864320 (7.5MB)
   0.0% used
To Space:
   capacity = 7864320 (7.5MB)
   used     = 0 (0.0MB)
   free     = 7864320 (7.5MB)
   0.0% used
PS Old Generation
   capacity = 51904512 (49.5MB)
   used     = 1069128 (1.0195999145507812MB)
   free     = 50835384 (48.48040008544922MB)
   2.0597978071732954% used

3089 interned Strings occupying 275096 bytes.

2.2.2 输出对象统计信息

命令:jmap -histo pid出堆中对象的统计信息,包括类、实例数量和总计容量,而jmap -histo:live pid表示存活对象的统计信息。

E:\study\tool\javaSE1.8\jdk1.8\bin>jmap -histo:live 9712 > d:\test2

test2文件中统计的对象统计信息如下所示

 num     #instances         #bytes  class name
----------------------------------------------
   1:          4597         482296  [C
   2:           421         129672  [B
   3:          4228         101472  java.lang.String
   4:           686          72784  java.lang.Class
   5:           639          41784  [Ljava.lang.Object;
   6:           785          31400  java.util.TreeMap$Entry
   7:           183          20392  [I
   8:           236          11784  [Ljava.lang.String;
   9:           332          10624  java.util.HashMap$Node
  10:           107           6848  java.net.URL
  11:           108           4320  java.lang.ref.SoftReference
  12:            20           4160  [Ljava.util.HashMap$Node;
  13:           256           4096  java.lang.Integer
  14:           118           3776  java.util.Hashtable$Entry
  15:           110           3520  java.util.concurrent.ConcurrentHashMap$Node
  16:           104           3512  [[C
  17:             7           2632  java.lang.Thread
  18:            52           2496  sun.misc.URLClassPath$JarLoader
  19:            29           2320  [Ljava.util.WeakHashMap$Entry;
  20:            58           2320  java.util.LinkedHashMap$Entry
  21:            26           2080  java.lang.reflect.Constructor
  22:            15           1968  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  23:            39           1872  sun.util.locale.LocaleObjectCache$CacheEntry
  24:            45           1800  java.lang.ref.Finalizer
  25:            26           1664  java.util.jar.JarFile
  26:            17           1632  java.util.jar.JarFile$JarFileEntry
  27:            28           1568  sun.nio.cs.UTF_8$Encoder
  28:             1           1560  [[B
  29:            58           1392  java.io.ExpiringCache$Entry
  30:            29           1392  java.util.WeakHashMap
  31:            84           1344  java.lang.Object
  32:            28           1344  java.util.HashMap
  33:            20           1280  java.util.concurrent.ConcurrentHashMap
  34:            30           1200  java.io.ObjectStreamField
  35:             9           1184  [Ljava.util.Hashtable$Entry;
  36:            36           1152  java.lang.ref.ReferenceQueue
  37:             1           1040  [Ljava.lang.Integer;
  38:            26            832  java.util.zip.ZipCoder
  39:            19            760  sun.util.locale.BaseLocale$Key
  40:            26            624  java.util.ArrayDeque
  41:            19            608  java.io.File
  42:            38            608  java.lang.ref.ReferenceQueue$Lock
  43:            19            608  java.util.Locale
  44:            19            608  sun.util.locale.BaseLocale
  45:            12            480  java.security.AccessControlContext
  46:            10            480  java.util.zip.Inflater
  47:            19            456  java.util.Locale$LocaleKey
  48:             1            432  [[[C
  49:            18            432  sun.misc.MetaIndex
  50:            17            408  java.util.jar.Attributes$Name
  51:             1            384  com.intellij.rt.execution.application.AppMainV2$1
  52:             1            384  java.lang.ref.Finalizer$FinalizerThread
  53:             6            384  java.nio.DirectByteBuffer
  54:             1            376  java.lang.ref.Reference$ReferenceHandler
  55:            13            360  [Ljava.io.ObjectStreamField;
  56:            19            360  [Ljava.lang.Class;
  57:             6            336  java.nio.DirectLongBufferU
  58:             4            320  [S
  59:             3            312  [D
  60:            13            312  sun.reflect.NativeConstructorAccessorImpl
  61:             9            288  java.lang.OutOfMemoryError
  62:             5            280  sun.util.calendar.ZoneInfo
  63:            11            264  java.util.ArrayList
  64:             8            256  java.util.Vector
  65:             3            240  [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
  66:             5            240  java.util.Hashtable
  67:            10            240  java.util.zip.ZStreamRef
  68:             2            216  [J
  69:            13            208  sun.reflect.DelegatingConstructorAccessorImpl
  70:             5            200  java.security.ProtectionDomain
  71:             5            200  java.util.WeakHashMap$Entry
  72:             6            192  java.lang.ThreadLocal$ThreadLocalMap$Entry
  73:             4            192  java.util.Properties
  74:             4            192  java.util.TreeMap
  75:             3            168  java.util.ResourceBundle$CacheKey
  76:             2            160  [[Ljava.lang.String;
  77:             4            160  java.io.FileDescriptor
  78:             4            160  java.lang.ClassLoader$NativeLibrary
  79:             5            160  java.security.CodeSource
  80:             5            160  sun.util.locale.provider.LocaleProviderAdapter$Type
  81:             3            144  java.nio.HeapByteBuffer
  82:             6            144  java.util.LinkedList$Node
  83:             3            144  java.util.ResourceBundle$BundleReference
  84:             6            144  sun.misc.PerfCounter
  85:             2            128  java.io.ExpiringCache$1
  86:             4            128  java.util.LinkedList
  87:             4            128  java.util.Stack
  88:             1            120  java.net.SocksSocketImpl
  89:             5            120  java.util.Collections$UnmodifiableRandomAccessList
  90:             5            120  sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer
  91:             3            120  sun.misc.URLClassPath
  92:             2            112  java.lang.Package
  93:             2            112  java.util.LinkedHashMap
  94:             1             96  [Ljava.lang.invoke.MethodType;
  95:             4             96  java.lang.RuntimePermission
  96:             2             96  java.lang.ThreadGroup
  97:             3             96  java.util.ResourceBundle$LoaderReference
  98:             3             96  sun.net.spi.DefaultProxySelector$NonProxyInfo
  99:             2             96  sun.nio.cs.StreamEncoder
 100:             1             88  java.net.DualStackPlainSocketImpl
 101:             1             88  sun.misc.Launcher$AppClassLoader
 102:             1             88  sun.misc.Launcher$ExtClassLoader
 103:             1             80  [Ljava.lang.invoke.LambdaForm;
 104:             5             80  [Ljava.security.Principal;
 105:             2             80  java.io.BufferedWriter
 106:             2             80  java.io.ExpiringCache
 107:             5             80  java.lang.ThreadLocal
 108:             2             80  java.lang.invoke.MethodType
 109:             5             80  java.security.ProtectionDomain$Key
 110:             2             80  sun.misc.FloatingDecimal$BinaryToASCIIBuffer
 111:             3             72  java.lang.ThreadLocal$ThreadLocalMap
 112:             1             72  java.lang.invoke.MethodTypeForm
 113:             3             72  java.net.Proxy$Type
 114:             3             72  java.util.Arrays$ArrayList
 115:             3             72  java.util.Collections$SynchronizedSet
 116:             1             72  java.util.ResourceBundle$RBClassLoader
 117:             3             72  sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer
 118:             1             72  sun.util.locale.provider.JRELocaleProviderAdapter
 119:             1             64  [F
 120:             2             64  [Ljava.lang.Thread;
 121:             2             64  java.io.FileOutputStream
 122:             2             64  java.io.FilePermission
 123:             2             64  java.io.PrintStream
 124:             2             64  java.lang.VirtualMachineError
 125:             2             64  java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry
 126:             2             64  java.lang.ref.ReferenceQueue$Null
 127:             2             64  java.security.BasicPermissionCollection
 128:             2             64  java.security.Permissions
 129:             4             64  java.util.HashSet
 130:             1             56  java.lang.invoke.MemberName
 131:             2             48  java.io.BufferedOutputStream
 132:             1             48  java.io.BufferedReader
 133:             2             48  java.io.File$PathStatus
 134:             2             48  java.io.FilePermissionCollection
 135:             2             48  java.io.OutputStreamWriter
 136:             2             48  java.net.InetAddress$Cache
 137:             2             48  java.net.InetAddress$Cache$Type
 138:             1             48  java.net.SocketInputStream
 139:             1             48  java.nio.HeapCharBuffer
 140:             2             48  java.nio.charset.CoderResult
 141:             3             48  java.nio.charset.CodingErrorAction
 142:             2             48  sun.misc.NativeSignalHandler
 143:             2             48  sun.misc.Signal
 144:             3             48  sun.net.www.protocol.jar.Handler
 145:             1             48  sun.nio.cs.StreamDecoder
 146:             1             48  sun.nio.cs.US_ASCII$Decoder
 147:             1             48  sun.util.locale.provider.LocaleResources$ResourceReference
 148:             1             40  [Lsun.util.locale.provider.LocaleProviderAdapter$Type;
 149:             1             40  java.io.BufferedInputStream
 150:             1             40  java.util.ResourceBundle$1
 151:             1             40  sun.nio.cs.StandardCharsets$Aliases
 152:             1             40  sun.nio.cs.StandardCharsets$Cache
 153:             1             40  sun.nio.cs.StandardCharsets$Classes
 154:             1             40  sun.nio.cs.UTF_8$Decoder
 155:             1             40  sun.nio.cs.ext.ExtendedCharsets
 156:             1             32  [Ljava.lang.OutOfMemoryError;
 157:             2             32  [Ljava.lang.StackTraceElement;
 158:             1             32  [Ljava.lang.ThreadGroup;
 159:             1             32  [Ljava.net.Proxy$Type;
 160:             1             32  java.io.FileInputStream
 161:             1             32  java.io.WinNTFileSystem
 162:             1             32  java.lang.ArithmeticException
 163:             2             32  java.lang.Boolean
 164:             1             32  java.lang.NullPointerException
 165:             1             32  java.net.Socket
 166:             2             32  java.nio.ByteOrder
 167:             1             32  java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
 168:             1             32  sun.instrument.InstrumentationImpl
 169:             1             32  sun.nio.cs.StandardCharsets
 170:             1             32  sun.util.locale.provider.LocaleResources
 171:             1             32  sun.util.locale.provider.LocaleServiceProviderPool
 172:             1             24  [Ljava.io.File$PathStatus;
 173:             1             24  [Ljava.lang.invoke.MethodHandle;
 174:             1             24  [Ljava.net.InetAddress$Cache$Type;
 175:             1             24  [Ljava.security.ProtectionDomain;
 176:             1             24  [Lsun.launcher.LauncherHelper;
 177:             1             24  java.io.InputStreamReader
 178:             1             24  java.lang.StringBuilder
 179:             1             24  java.lang.invoke.LambdaForm$NamedFunction
 180:             1             24  java.lang.invoke.MethodType$ConcurrentWeakInternSet
 181:             1             24  java.lang.reflect.ReflectPermission
 182:             1             24  java.net.Inet4Address
 183:             1             24  java.net.Inet6AddressImpl
 184:             1             24  java.net.InetAddress$InetAddressHolder
 185:             1             24  java.net.Proxy
 186:             1             24  java.util.BitSet
 187:             1             24  java.util.Collections$EmptyMap
 188:             1             24  java.util.Collections$SetFromMap
 189:             1             24  java.util.Locale$Cache
 190:             1             24  java.util.ResourceBundle$Control$CandidateListCache
 191:             1             24  sun.instrument.TransformerManager
 192:             1             24  sun.launcher.LauncherHelper
 193:             1             24  sun.misc.JarIndex
 194:             1             24  sun.misc.URLClassPath$FileLoader
 195:             1             24  sun.nio.cs.ISO_8859_1
 196:             1             24  sun.nio.cs.ThreadLocalCoders$1
 197:             1             24  sun.nio.cs.ThreadLocalCoders$2
 198:             1             24  sun.nio.cs.US_ASCII
 199:             1             24  sun.nio.cs.UTF_16
 200:             1             24  sun.nio.cs.UTF_16BE
 201:             1             24  sun.nio.cs.UTF_16LE
 202:             1             24  sun.nio.cs.UTF_8
 203:             1             24  sun.nio.cs.ext.GBK
 204:             1             24  sun.util.locale.BaseLocale$Cache
 205:             1             24  sun.util.locale.provider.TimeZoneNameProviderImpl
 206:             1             16  [Ljava.lang.Throwable;
 207:             1             16  [Ljava.security.cert.Certificate;
 208:             1             16  [Lsun.instrument.TransformerManager$TransformerInfo;
 209:             1             16  java.io.FileDescriptor$1
 210:             1             16  java.lang.CharacterData00
 211:             1             16  java.lang.CharacterDataLatin1
 212:             1             16  java.lang.Runtime
 213:             1             16  java.lang.String$CaseInsensitiveComparator
 214:             1             16  java.lang.System$2
 215:             1             16  java.lang.Terminator$1
 216:             1             16  java.lang.invoke.MemberName$Factory
 217:             1             16  java.lang.ref.Reference$Lock
 218:             1             16  java.lang.reflect.ReflectAccess
 219:             1             16  java.net.InetAddress$2
 220:             1             16  java.net.URLClassLoader$7
 221:             1             16  java.nio.Bits$1
 222:             1             16  java.nio.charset.CoderResult$1
 223:             1             16  java.nio.charset.CoderResult$2
 224:             1             16  java.security.ProtectionDomain$1
 225:             1             16  java.security.ProtectionDomain$3
 226:             1             16  java.util.Collections$EmptyList
 227:             1             16  java.util.Collections$EmptySet
 228:             1             16  java.util.Hashtable$EntrySet
 229:             1             16  java.util.ResourceBundle$Control
 230:             1             16  java.util.WeakHashMap$KeySet
 231:             1             16  java.util.concurrent.atomic.AtomicInteger
 232:             1             16  java.util.jar.JavaUtilJarAccessImpl
 233:             1             16  java.util.zip.ZipFile$1
 234:             1             16  sun.misc.ASCIICaseInsensitiveComparator
 235:             1             16  sun.misc.FloatingDecimal$1
 236:             1             16  sun.misc.Launcher
 237:             1             16  sun.misc.Launcher$Factory
 238:             1             16  sun.misc.Perf
 239:             1             16  sun.misc.Unsafe
 240:             1             16  sun.net.spi.DefaultProxySelector
 241:             1             16  sun.net.www.protocol.file.Handler
 242:             1             16  sun.reflect.ReflectionFactory
 243:             1             16  sun.util.calendar.Gregorian
 244:             1             16  sun.util.locale.provider.AuxLocaleProviderAdapter$NullProvider
 245:             1             16  sun.util.locale.provider.SPILocaleProviderAdapter
 246:             1             16  sun.util.locale.provider.TimeZoneNameUtility$TimeZoneNameGetter
 247:             1             16  sun.util.resources.LocaleData
 248:             1             16  sun.util.resources.LocaleData$LocaleDataResourceBundleControl
Total         14255         990352

另外除了上述常用指令所示,还有不常用的如下命令:

  • jmap -finailizerinfo pid 输出在F-Queue中等待Finalizer线程执行finalize方法的对象,只在Linux/Solaris平台有效;
  • jmap -permstat pid 以ClassLoader为统计口径显示永久代(JDK7之前版本)的内存状态,只在Linux/Solaris平台有效;
  • jmap -dump -F pid 当dump文件没相应时,强制生成dump文件,只在Linux/Solaris平台有效。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值