1.基础命令
cat /tmp/a.txt
thread | grep -m 10 -e "TIMED_WAITING|WAITING"
示例
THREAD 相关
COUNT: JVM 当前活跃的线程数
DAEMON-COUNT: JVM 当前活跃的守护线程数
PEAK-COUNT: 从 JVM 启动开始曾经活着的最大线程数
STARTED-COUNT: 从 JVM 启动开始总共启动过的线程次数
DEADLOCK-COUNT: JVM 当前死锁的线程数
3.火焰图分析
命令介绍
profiler start:开始搜集样本
profiler getSamples:搜集的样本数,时间越长搜集的样本数越多
profiler list:可搜集的event,默认为CPU
profiler status:搜集时间
profiler stop:搜集暂停,默认搜集为.svg图片文件,需要转换下文件格式和输出路径 (profiler stop --format html --file /service/app/logs/xxx.html )
示例
图形介绍
1.这里的x轴代表采样总量(也就是此刻所有执行的耗时cpu的方法)。
这是注意的是x 轴并不代表时间,而是所有的调用方法合并后,按字母顺序排列。
2.Y轴代表方法的调用栈深度,每一层都是一个方法。顶部是正在执行的方法。当然调用栈越深,火焰就越高。
3.鼠标可以点击的选中的每个框就代表了一个栈里的函数,其宽度可以直接理解为CPU时间占比(其实是采样的数量以及与采样总量的占比)。
那么,也就是说占比比较宽的框就表示:
a.该函数运行时间较长(单次时间长)
b.被调用次数较多.(调用频率高)
进而被采样的次数比较多,占用的CPU时间多。
4.另外火焰图:
绿色部分代表Java代码
黄色部分代表JVM C++代码
橙色部分代表内核态C语言代码
红色代表用户态C语言代码
由此可知,火焰图可以直观的帮我们分析CPU占用情况。