今天继续来说一下Arthas中的thread,
这里的cpu使用率与linux 命令top -Hp <pid> 的线程%CPU类似,一段采样间隔时间内,当前JVM里各个线程的增量cpu时间与采样间隔时间的比例。
工作原理说明:
首先第一次采样,获取所有线程的CPU时间(调用的是java.lang.management.ThreadMXBean.getThreadCpuTime()和sun.management.HotspotThreadMBean.getInternalThreadCpuTimes()接口)
然后睡眠等待一个间隔时间(默认为200ms,可以通过-i指定间隔时间)
再次第二次采样,获取所有线程的CPU时间,对比两次采样数据,计算出每个线程的增量CPU时间
线程CPU使用率 = 线程增量CPU时间 / 采样间隔时间 * 100%
1.thread -->查看当前进程的所有线程信息
参数说明:
Threads Total: 总线程数
NEW: 初始状态的线程
RUNNABLE: 就绪(可运行状态)状态的线程
BLOCKED: 阻塞状态的线程
WAITING: 等待线程
TIMED_WAITING: 超时等待线程
TERMINATED: 死亡状态
其他线程信息和dashboard一样
2.thread 线程id-->查看指定线程并输出线程栈(当我们发现哪个线程占用cpu高的时候可以继续看一下他的 栈情况),如下
3.thread -n 3 -->查看最繁忙的n个线程
4.thread -n 3 -i 1000 -->查看1000ms内最繁忙的n个线程
5.thread -b-->查看阻塞状态的线程
6.thread |grep 线程状态-->模糊找出指定状态的线程,如下
7.thread --state WAITING-->找出指定状态的线程
今天就到这里,明天继续Arthas的JVM