【2019-08-12】java进程cpu使用率高,定位具体线程

问题现象

cpu使用率高

分析过程

  1. 使用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的百分比
  1. 获取进程中线程信息
top -H -p PID > /tmp/top.txt
  1. 获取进程信息
 jstack PID > /tmp/jstack.txt
  1. 将线程tid转化成16进制
printf "0x%x\n" tid
  1. 将16进制的信息在jstack.txt匹配找到对应的线程。

你可能感兴趣的:(【2019-08-12】java进程cpu使用率高,定位具体线程)