关注程序性能(2) jstack, jmap, jvisualvm

1. jstack

localhost:jvm_test_dump bao$ jstack 57426
2017-07-07 10:58:50
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode):

"JMX server connection timeout 14" #14 daemon prio=9 os_prio=31 tid=0x00007fc8b507c800 nid=0x5103 in Object.wait() [0x000070000c4c0000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:168)
    - locked <0x000000076f580720> (a [I)
    at java.lang.Thread.run(Thread.java:748)

"RMI Scheduler(0)" #13 daemon prio=9 os_prio=31 tid=0x00007fc8b592f000 nid=0x4f03 waiting on condition [0x000070000c3bd000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000076f598188> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.lang.Thread.run(Thread.java:748)

"RMI TCP Connection(3)-127.0.0.1" #12 daemon prio=9 os_prio=31 tid=0x00007fc8b60f9800 nid=0x4d03 runnable [0x000070000c2b9000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.lang.Thread.run(Thread.java:748)

"RMI TCP Accept-0" #11 daemon prio=9 os_prio=31 tid=0x00007fc8b58e4000 nid=0x120f runnable [0x000070000c1b7000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.lang.Thread.run(Thread.java:748)

"Attach Listener" #9 daemon prio=9 os_prio=31 tid=0x00007fc8b5074800 nid=0xf0b waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Service Thread" #8 daemon prio=9 os_prio=31 tid=0x00007fc8b504b000 nid=0x4903 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
"main" #1 prio=5 os_prio=31 tid=0x00007fc8b5007000 nid=0x1c03 waiting on condition [0x000070000b38d000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at test_jvm.TestJVM.main(TestJVM.java:7)

"VM Thread" os_prio=31 tid=0x00007fc8b5835000 nid=0x2d03 runnable 

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fc8b580a000 nid=0x2503 runnable 

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fc8b580a800 nid=0x2703 runnable 

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fc8b580b000 nid=0x2903 runnable 

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fc8b580c000 nid=0x2b03 runnable 

"VM Periodic Task Thread" os_prio=31 tid=0x00007fc8b4803000 nid=0x4b03 waiting on condition 

JNI global references: 294

localhost:jvm_test_dump bao$ 

2. jmap Java内存映像工具

jmap(memory map for java),命令用于生成堆转储快照(一般称为heap dump或dump文件)。如果不使用jmap命令,想要获取Java堆转储快照,还有一些比较“暴力”的手段。
比如使用 -XX:HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现后自动生成dump文件,通过-XX:HeapDumpOnCtrlBreak参数可以使用[ctrl]+[break]键让虚拟机生成dump文件,又或者在Linux系统下通过 kill -3命令发送进程退出信号“吓唬”一下虚拟机,也能拿到dump文件。

2.1 jmap -heap XXXX
localhost:jvm_test_dump bao$ jmap -heap 57426
Attaching to process ID 57426, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11

using thread-local object allocation.
Parallel GC with 4 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     = 60064184 (57.28166961669922MB)
   free     = 7044680 (6.718330383300781MB)
   89.50260877609253% used
From Space:
   capacity = 11010048 (10.5MB)
   used     = 5996544 (5.71875MB)
   free     = 5013504 (4.78125MB)
   54.464285714285715% 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     = 40960 (0.0390625MB)
   free     = 179265536 (170.9609375MB)
   0.02284356725146199% used

4910 interned Strings occupying 389480 bytes.
localhost:jvm_test_dump bao$ 
2.2 jmap -histo XXXX
 num     #instances         #bytes  class name
----------------------------------------------
   1:         82619        3100192  [Ljava.lang.Object;
   2:         36111        2923600  [C
   3:          9315        1835640  [B
   4:         21339        1024272  java.util.HashMap
   5:         30337         970784  java.io.ObjectStreamClass$WeakClassKey
   6:          4588         916584  [I
   7:         20274         810960  java.util.TreeMap$Entry
   8:          9144         586792  [Ljava.util.Hashtable$Entry;
   9:         18261         584352  java.util.Vector
  10:         20446         490704  java.lang.String
  11:          9137         438576  java.util.Hashtable
  12:          9248         369920  java.security.ProtectionDomain
  13:          9129         292128  java.security.CodeSource
  14:          2802         291408  java.io.ObjectStreamClass
  15:         11216         269184  java.lang.Long
  16:          3016         217152  javax.management.remote.rmi.RMIConnectionImpl$CombinedClassLoader
  17:          3016         217152  javax.management.remote.rmi.RMIConnectionImpl$CombinedClassLoader$ClassLoaderWrapper
  18:          3015         217080  com.sun.jmx.remote.util.OrderClassLoaders
  19:          1721         194400  java.lang.Class
  20:          9248         147968  [Ljava.security.Principal;
  21:          9248         147968  java.security.ProtectionDomain$Key
  22:          9138         146208  java.util.HashSet
jmap -dump:format=b,file=test2.bin XXXX
localhost:jvm_test_dump bao$ jmap -dump:format=b,file=test2.bin 57426
Dumping heap to /Users/bao/jvm_test_dump/test2.bin ...
Heap dump file created
localhost:jvm_test_dump bao$ 

3. jvisualvm

这里写图片描述
将是一部的镜像文件导入
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值