jvm排查工具箱jvm-tools

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

下载

  • sjk.jar - all commands without mxdump
  • sjk-plus.jar - all commands

实例

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

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

  • jvm-tools

原文发布于微信公众号 - 码匠的流水账(geek_luandun)

原文发表时间:2018-01-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏BinarySec

CVE-2016-0095从PoC到Exploit

2642
来自专栏北京马哥教育

centos7上的xfs配置

XFS是扩展性高、高性能的文件系统。也是rhel7/centos7的默认文件系统。 XFS支持metadata journaling,这使其能从crash中更快...

3483
来自专栏IT杂记

Hadoop SequnceFile.Writer 压缩模式及压缩库浅析

先说明SequnceFile的压缩类型(Compression Type)分为三种NONE,RECORD,BLOCK,通过配置项io.seqfile.compr...

21010
来自专栏涤生的博客

PhantomReference导致CMS GC耗时严重

GC优化关键是找到优化的点,如果明确GC过程中耗时的阶段在哪里,优化起来应该也就不难了。这篇文章主要讲述最近一次CMS GC优化过程,是一次分享,也是一次总结。...

1752
来自专栏JMCui

Netty 系列八(基于 WebSocket 的简单聊天室).

    之前写过一篇 Spring 集成 WebSocket 协议的文章 —— Spring消息之WebSocket ,所以对于 WebSocket 协议的介绍...

2475
来自专栏一英里广度一英寸深度的学习

HDFS 高阶内容

保存 文件树 保存 file->block (file == idnode) 不保存 block->location

942
来自专栏Android 研究

APK安装流程详解12——PMS中的新安装流程上(拷贝)

从上面一片文章我们知道InstallAppProgress里面最后更新的代码是调用到PackageManager#installPackageWithVerif...

1351
来自专栏Kubernetes

深度解析Kubernetes Local Persistent Volume(二)

摘要:上一篇博客”深度解析Kubernetes Local Persistent Volume(一)“对local volume的基本原理和注意事项进行了分析,...

1.2K3
来自专栏纯洁的微笑

springboot(十一):Spring boot中mongodb的使用

mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多。由于很多公司使用了云服务,服务器默认都开放了外网地址,...

3486
来自专栏逸鹏说道

我这么玩Web Api(一)

帮助页面或用户手册(Microsoft and Swashbuckle Help Page) 前言   你需要为客户编写Api调用手册?你需要测试你的Api接口...

3085

扫码关注云+社区

领取腾讯云代金券