# 1. 概述
对应于观看“OS指标及繁忙进程”的top,vjtop就是观察“JVM进程指标及其繁忙线程”的首选工具。
**JVM进程信息**:收集了进程在OS层面和JVM层面的所有重要指标。大家为什么喜欢用[dstat](http://dag.wiee.rs/home-made/dstat/)看OS状态,因为它将你想看的数据全都收集呈现眼前了,vjtop也是这样的风格。
**繁忙线程信息**: 对比于“先top -H 列出线程,再执行jstack拿到全部线程,再手工换算十与十六进制的线程号”的繁琐过程,vjtop既方便,又可以连续跟踪,更不会因为jstack造成JVM停顿。
对于超出正常范围的值,vjtop还很贴心的进行了变色显示。
运行时不造成应用停顿,可在线上安全使用。
**常用场景:**
1. 性能问题快速定位,用vjtop显示出CPU繁忙或内存消耗大的线程,再实时交互翻查该线程的stack trace。
2. 压测场景,用vjtop实时反馈JVM进程状态,类似于用dstast对操作系统指标的监控。
3. 生产环境,当应用出现问题时,用vjtop快速了解进程的状态。还可与监控系统结合,发现指标(如CPU、超时请求数)超出阈值时,用钩子脚本调用vjtop来纪录事发地的状况。
在[jvmtop](https://github.com/patric-r/jvmtop) 的基础上二次开发,结合 [SJK](https://github.com/aragozin/jvm-tools)的优点,从/proc , PerfData,JMX等处,以更高的性能,获取更多的信息。
# 2. 使用说明
## 2.1 概述
[Download 1.0.8.zip](http://repo1.maven.org/maven2/com/vip/vjtools/vjtop/1.0.8/vjtop-1.0.8.zip) (from Maven Central)
vjtop运行所需权限与jstack相同,必须与目标JVM使用相同的JDK版本运行,必须与目标JVM使用相同用户运行。如果仍有问题,请看后面的执行问题排查章节。
```
// 占用CPU最多的线程
./vjtop.sh <PID>
// 打印选项,每个版本的参数会有变动,特别是模式参数,以help信息为准
./vjtop.sh -h
```
## 2.2 找出CPU最繁忙的线程
### 2.2.1 命令参数
```
// 按时间区间内,线程占用的CPU排序,默认显示前10的线程,默认每10秒打印一次
./vjtop.sh <PID>
// 按时间区间内,线程占用的SYS CPU排序
./vjtop.sh -m syscpu <PID>
// 按线程从启动以来的总占用CPU来排序
./vjtop.sh -m totalcpu <PID>
// 按线程从启动以来的总SYS CPU排序
./vjtop.sh -m totalsyscpu <PID>
```
### 2.2.2 输出示例:
```
PID: 191082 - 17:43:12 JVM: 1.7.0_79 USER: calvin UPTIME: 2d02h
PROCESS: 685.00% cpu(28.54% of 24 core), 787 thread
MEMORY: 6626m rss, 6711m peak, 0m swap | DISK: 0B read, 13mB write
THREAD: 756 live, 749 daemon, 1212 peak, 0 new | CLASS: 15176 loaded, 161 unloaded, 0 new
HEAP: 630m/1638m eden, 5m/204m sur, 339m/2048m old
NON-HEAP: 80m/256m/512m perm, 13m/13m/240m codeCache
OFF-HEAP: 0m/0m direct(max=2048m), 0m/0m map(count=0), 756m threadStack
GC: 6/66ms/11ms ygc, 0/0ms fgc | SAFE-POINT: 6 count, 66ms time, 5ms syncTime
TID NAME STATE CPU SYSCPU TOTAL TOLSYS
23 AsyncAppender-Worker-ACCESSFILE-ASYNC WAITING 23.56% 6.68% 2.73% 0.72%
560 OSP-Server-Worker-4-5 RUNNABLE 22.58% 10.67% 1.08% 0.48%
9218 OSP-Server-Worker-4-14 RUNNABLE 22.37% 11.45% 0.84% 0.40%
8290 OSP-Server-Worker-4-10 RUNNABLE 22.36% 11.24% 0.88% 0.41%
8425 OSP-Server-Worker-4-12 RUNNABLE 22.24% 10.72% 0.98% 0.47%
8132 OSP-Server-Worker-4-9 RUNNABLE 22.00% 10.68% 0.90% 0.42%
8291 OSP-Server-Worker-4-11 RUNNABLE 21.80% 10.09% 0.89% 0.41%
8131 OSP-Server-Worker-4-8 RUNNABLE 21.68% 9.77% 0.93% 0.44%
9219 OSP-Server-Worker-4-15 RUNNABLE 21.56% 10.43% 0.90% 0.41%
8426 OSP-Server-Worker-4-13 RUNNABLE 21.35% 10.42% 0.66% 0.31%
Total : 668.56% cpu(user=473.25%, sys=195.31%) by 526 atcive threads(which cpu>0.05%)
Setting: top 10 threads order by CPU, flush every 10s
Input command (h for help):
```
进程区数据解释:
* `PROCESS`: `thread`: 进程的操作系统线程数, `cxtsw`为主动与被动的线程上下文切换数
* `MEMORY`: `rss` 为 Resident Set Size, 进程实际占用的物理内存; `peak`为最峰值的rss; `swap`为进程被交换到磁盘的虚拟内存。
* `DISK`: 真正达到物理存储层的读/写的速度。
* `THREAD`: Java线程数, `active`为当前线程数, `daemon`为active线程中的daemon线程数, `new`为刷新周期内新创建的线程数。
* `CLASS`: `loaded`为当前加载的类数量,`unloaded`为总卸载掉的类数量,`new`为刷新周期内新加载的类数量。
* `HEAP`: 1.0.3版开始每一项有三个数字, 分别为1.当前使用内存, 2.当前已申请内存, 3.最大内存; 如果后两个数字相同时则合并。
* `sur`: 当前存活区的大小,注意实际有from, to 两个存活区。
* `NON-HEAP`: 数字含义同`HEAP`
* `codeCache`: JIT编译的二进制代码的存放区,满后将不能编译新的代码。
* `direct`: 堆外内存,三个数字含义同`HEAP`, 未显式设置最大内存时,约等于堆内存大小。注意新版Netty不经过JDK API所分配的堆外内存未在此统计。
* `map`: 映射文件内存,三个数字分别为1. map数量,2.当前使用内存,3.当前已申请内存,没有最大值数据。
* `threadStack`: Java线程所占的栈内存总和,但不包含VM线程。(since 1.0.3)
* `ygc`: YoungGC, 三个数字分别为次数/总停顿时间/平均停顿时间
* `fgc`: OldGC + FullGC, 两个数字分别为次数/总执行时间,注意此时间仅为执行时间,非JVM停顿时间。
* `SAFE-POINT`: PerfData开启时可用,JVM真正的停顿次数及停顿时间,以及等待所有线程进入安全点所消耗的时间。
线程区数据解释:
* `CPU`: 线程在打印间隔内使用的CPU百分比(按单个核计算)
* `SYSCPU`: 线程在打印间隔内使用的SYS CPU百分比(按单个核计算)
* `TOTAL`: 从进程启动到现在,线程的总CPU时间/进程的总CPU时间的百分比
* `TOLSYS`: 从进程启动到现在,线程的总SYS CPU时间/进程的总CPU时间的百分比
底部数据解释:
* 如果该线程的平均使用CPU少于单核的0.1%,这条线程将不参与排序显示,减少消耗。
## 2.3 找出内存分配最频繁的线程
### 2.3.1 命令参数
```
// 线程分配内存的速度排序,默认显示前10的线程,默认每10秒打印一次
./vjtop.sh -m 5 <PID>
// 按线程的总内存分配而不是打印间隔内的内存分配来排序
./vjtop.sh -m 6 <PID>
```
### 2.3.2 输出示例
```
(忽略头信息)
THREADS-MEMORY: 30k/s allocation rate
TID NAME STATE MEMORY TOTAL-ALLOCATED
47636 RMI TCP Connection(583)-127.0.0.1 RUNNABLE 27k/s(88.76%) 17m( 0.00%)
1 main RUNNABLE 2k/s( 8.44%) 370g(83.16%)
47845 JMX server connection timeout 47845 TIMED_WAIT 251/s( 0.80%) 21k( 0.00%)
46607 Worker-501 TIMED_WAIT 60/s( 0.19%) 934m( 0.20%)
46609 Worker-502 TIMED_WAIT 60/s( 0.19%) 822m( 0.18%)
46610 Worker-503 TIMED_WAIT 60/s( 0.19%) 737m( 0.16%)
46763 Worker-504 TIMED_WAIT 60/s( 0.19%) 696m( 0.15%)
46764 Worker-505 TIMED_WAIT 60/s( 0.19%) 743m( 0.16%)
47149 Worker-506 TIMED_WAIT 60/s( 0.19%) 288m( 0.06%)
46551 Wor
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
VJTools-master.zip (318个子文件)
merge.bat 716B
vjmap.bat 555B
vjtop.bat 431B
vjmxcli.bat 422B
.gitignore 194B
.gitkeep 0B
.gitkeep 0B
S864_java.html 4KB
S1166_java.html 2KB
S1068_java.html 2KB
S121_java.html 2KB
index.html 1KB
S1172_java.html 1017B
S1313_java.html 917B
S115_java.html 496B
S1291_java.html 356B
Client.java 27KB
VMDetailView.java 20KB
IntObjectHashMap.java 19KB
LongObjectHashMap.java 19KB
LongObjectHashMap.java 19KB
VMInfo.java 17KB
JmxClient.java 14KB
FileUtil.java 14KB
ReflectionUtil.java 12KB
ThreadPoolBuilder.java 11KB
MapUtil.java 11KB
ListUtil.java 11KB
DateUtil.java 11KB
Striped64.java 11KB
VJMap.java 9KB
RandomUtil.java 9KB
MapUtilTest.java 8KB
NumberUtil.java 8KB
WildcardMatcher.java 8KB
SystemPropertiesUtil.java 8KB
UnusedPrivateFieldCheck.java 8KB
JsonMapperTest.java 8KB
FileUtilTest.java 7KB
OperatorPrecedenceCheck.java 7KB
DateUtilTest.java 7KB
TopThreadInfo.java 7KB
HashUtil.java 7KB
Formats.java 7KB
InteractiveTask.java 7KB
NetUtil.java 7KB
ReflectionUtilTest.java 7KB
CatchUsesExceptionWithContextCheck.java 7KB
ExceptionUtil.java 6KB
ExceptionUtilTest.java 6KB
DateFormatUtil.java 6KB
UnusedMethodParameterCheck.java 6KB
ClassUtilTest.java 6KB
FormatsTest.java 6KB
SystemPropertiesUtilTest.java 6KB
UnitConverter.java 6KB
VJTop.java 6KB
ThreadPoolBuilderTest.java 6KB
CryptoUtil.java 6KB
SonarDefinition.java 6KB
DataMaskTest.java 6KB
SortedArrayList.java 5KB
NumberUtilTest.java 5KB
QueuableCachedThreadPool.java 5KB
SetUtil.java 5KB
JsonMapper.java 5KB
LongAdder.java 5KB
BeanMapperTest.java 5KB
TextValidator.java 5KB
PerformanceUtil.java 5KB
CollectionUtil.java 5KB
MoreMaps.java 5KB
BadConstantNameCheck.java 5KB
ClassUtil.java 5KB
OptionAdvanceParser.java 5KB
ThreadPoolUtilTest.java 5KB
MoneyUtil.java 4KB
ListUtilTest.java 4KB
GCutilExpression.java 4KB
FileTreeWalker.java 4KB
AnnotationUtil.java 4KB
StringBuilderWriter.java 4KB
ThreadPrinter.java 4KB
CsvUtil.java 4KB
XmlMapper.java 4KB
MoreStringUtil.java 4KB
ResultPrinter.java 4KB
IOUtil.java 4KB
XmlMapperTest.java 4KB
MoreValidateTest.java 4KB
BasicFuture.java 4KB
RequestSlidingWindowTest.java 4KB
SizeUnit.java 4KB
ArrayUtil.java 4KB
OldgenAccessor.java 4KB
TimeSlidingWindowTest.java 4KB
HeapHistogramVisitor.java 4KB
ResourceUtil.java 4KB
ThreadPoolUtil.java 4KB
ProactiveGcTask.java 4KB
共 318 条
- 1
- 2
- 3
- 4
资源评论
m0_72731342
- 粉丝: 2
- 资源: 1832
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功