jvm排查工具箱jvm-tools

本文主要介绍的是一款jvm排查工具箱:jvm-tools。除了对基本jvm封装外,还提供了jmx访问以及火焰图的生成。

下载

实例

cpu and memory usage

java -jar sjk-0.9.jar ttop -o CPU -n 10 -p pid
java -jar sjk-0.9.jar ttop -o USER -n 10 -p pid
java -jar sjk-0.9.jar ttop -o SYS -n 10 -p pid
java -jar sjk-0.9.jar ttop -o ALLOC -n 10 -p pid

一个命令搞定排查造成cpu高的线程

root@d3daf1eca8ca:/# java -jar sjk-0.9.jar ttop -o CPU -n 10 -p 1
Monitoring threads ...

2018-01-01T07:18:26.773+0000 Process summary
  process cpu=6.88%
  application cpu=1.37% (user=1.30% sys=0.07%)
  other: cpu=5.51%
  thread count: 25
  GC time=0.00% (young=0.00%, old=0.00%)
  heap allocation rate 390kb/s
  safe point rate: 1.5 (events/s) avg. safe point pause: 0.16ms
  safe point sync time: 0.01% processing time: 0.02% (wallclock time)
[000068] user= 1.30% sys= 0.02% alloc=  386kb/s - RMI TCP Connection(1)-172.17.0.2
[000070] user= 0.00% sys= 0.03% alloc=  4268b/s - JMX server connection timeout 70
[000047] user= 0.00% sys= 0.01% alloc=     0b/s - NioBlockingSelector.BlockPoller-1
[000060] user= 0.00% sys= 0.01% alloc=    52b/s - http-nio-8080-AsyncTimeout
[000058] user= 0.00% sys= 0.00% alloc=    23b/s - http-nio-8080-ClientPoller-0
[000014] user= 0.00% sys= 0.00% alloc=     0b/s - container-0
[000002] user= 0.00% sys= 0.00% alloc=     0b/s - Reference Handler
[000003] user= 0.00% sys= 0.00% alloc=     0b/s - Finalizer
[000004] user= 0.00% sys= 0.00% alloc=     0b/s - Signal Dispatcher
[000013] user= 0.00% sys= 0.00% alloc=     0b/s - ContainerBackgroundProcessor[StandardEngine[Tomcat]]

histo

java -jar sjk-0.9.jar hh -n 10 --dead -p pid
java -jar sjk-0.9.jar hh -n 10 --dead-young -p pid
java -jar sjk-0.9.jar hh -n 10 --live -p pid

查看对象统计

root@d3daf1eca8ca:/# java -jar sjk-0.9.jar hh -n 10 --live -p 1
   #      Instances          Bytes  Type
   1:         67025        9944432  [C
   2:          9382        2209656  [I
   3:         18413        1620344  java.lang.reflect.Method
   4:         65810        1579440  java.lang.String
   5:          4140        1283520  [B
   6:         35735        1143520  java.util.concurrent.ConcurrentHashMap$Node
   7:          8514         946936  java.lang.Class
   8:         15267         610680  java.util.LinkedHashMap$Entry
   9:          9027         505512  java.util.LinkedHashMap
  10:         10414         494656  [Ljava.lang.Object;
Total        475830       28175752

gc

java -jar sjk-0.9.jar gc -p pid

查看gc日志

root@d3daf1eca8ca:/# java -jar sjk-0.9.jar gc -p 1
MBean server connected
Collecting GC stats ...
[GC: Copy#112 time: 4ms mem: Survivor Space: 0k+135k->135k[max:17088k] Compressed Class Space: 5190k+0k->5190k[max:1048576k] Eden Space: 18496k-18496k->0k[max:137152k] Metaspace: 41247k+0k->41247k Tenured Gen: 27515k+0k->27515k[max:342720k]]
[GC: Copy#113 time: 2ms interval: 6649ms mem: Survivor Space: 135k+304k->439k[max:17088k,rate:45.83kb/s] Compressed Class Space: 5243k+0k->5243k[max:1048576k,rate:0.00kb/s] Eden Space: 18496k-18496k->0k[max:137152k,rate:-2781.77kb/s] Metaspace: 41696k+0k->41696k[rate:0.00kb/s] Tenured Gen: 27515k+0k->27515k[max:342720k,rate:0.00kb/s]]
[GC: Copy#114 time: 3ms interval: 675ms mem: Survivor Space: 439k+779k->1219k[max:17088k,rate:1154.48kb/s] Compressed Class Space: 5338k+0k->5338k[max:1048576k,rate:0.00kb/s] Eden Space: 18496k-18496k->0k[max:137152k,rate:-27401.48kb/s] Metaspace: 42470k+0k->42470k[rate:0.00kb/s] Tenured Gen: 27515k+0k->27515k[max:342720k,rate:0.00kb/s]]

stack

## collect 30 seconds
java -jar sjk-0.9.jar stcap -o dump.std -t 30000 -p pid
java -jar sjk-0.9.jar stcap -o dump.std -p pid

dump线程堆栈

root@d3daf1eca8ca:/# java -jar sjk-0.9.jar stcap -o dump.std -p 1
Writing to /dump.std
Collected 506
Collected 1012
Collected 1518
Collected 2001
Collected 2507
//......
Trace dumped: 123211

查看堆栈或生成火焰图

java -jar sjk-0.9.jar ssa -f dump.std --print
java -jar sjk-0.9.jar ssa -f dump.std --histo
java -jar sjk-0.9.jar ssa -f dump.std --flame > flame.svg
屏幕快照 2018-01-01 下午3.26.18.png

jmx

java -jar sjk-0.9.jar --help mx
java -jar sjk-0.9.jar mx -mi -b java.lang:type=Threading -p pid
java -jar sjk-0.9.jar mx -mg -b java.lang:type=Memory -f HeapMemoryUsage -p pid

查看jmx

root@d3daf1eca8ca:/# java -jar sjk-0.9.jar mx -mg -b java.lang:type=Memory -f HeapMemoryUsage -p 1
java.lang:type=Memory
committed: 68194304
init:      33554432
max:       508887040
used:      49297880

小结

使用ttop命名查看cpu高的线程,以及使用stack stcap和ssa生成火焰图相当便利,值得推荐。

doc

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频...
    Rick617阅读 7,327评论 1 9
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,575评论 3 83
  • http://www.cnblogs.com/angeldevil/p/3801189.html值得一看 Clas...
    snail_knight阅读 1,418评论 1 0
  • 最近工作中,老是遇到程序假死或者宕掉,最终原因都是full gc导致,刚好回过头再学习一下JVM内存模式,以及GC...
    VIPSHOP_FCS阅读 1,704评论 0 4
  • 十来天的旅程终于结束。想想很是欣慰。辗转几千地的旅程,一岁五个月的小人只有轻微的一次水土不服,稍微吃了一点药物睡了...
    燕子一一阅读 164评论 0 1