问题现象
cpu使用率高
分析过程
- 使用top命令获取cpu的高的进程编号PID。
op显示信息,需要关注的相关信息:
- load average:反映了任务队列的平均长度。如果此值超过了CPU数量,则表示当前CPU数量不足以处理任务,负载过高
- %us:用户CPU时间百分比。如果此值过高,可能是代码中存在死循环、或是频繁GC等
- %sy:系统CPU时间百分比。如果此值过高,可能是系统线程竞争激烈,上下文切换过多,应当减少线程数
- %wa:等待输入输出CPU时间百分比。如果此值过高,说明系统IO速度过慢,CPU大部分时间都在等待IO完成
- %hi:硬件中断CPU百分比。当硬件中断发生时,CPU会优先去处理,例如网卡收包会产生硬件中断,会优先处理
- swap used:被使用的swap。内存不住时才会用到,此值过高代表系统因为内存不足而导致频繁的换入、换出操作,这样会影响效率,应增大内存量
- %CPU:进程使用CPU的百分比
- 获取进程中线程信息
top -H -p PID > /tmp/top.txt
- 获取进程信息
jstack PID > /tmp/jstack.txt
- 将线程tid转化成16进制
printf "0x%x\n" tid
- 将16进制的信息在jstack.txt匹配找到对应的线程。