实战——Linux服务器CPU飙升原因排查

使用top + jstack

  • 使用命令行top,排查查是哪个进程占用cpu最高,获取到进程号,如:36032
  • 再通过命令查出该进程下哪个线程占用cpu最高,如得到线程pid:36044
top -Hp 高cpu占用率的进程号
  • 使用命令将36044转为十六位进制,得到:8ccc
printf %x 36044
  • 使用jstack命令dump文件
jstack 36032 > 1.txt
  • 最后使用命令,查询该线程异常的代码位置,分析上下文代码即可得出原因
# 找到文件中8ccc的位置,并显示后30行信息,即可找到具体代码位置
cat 1.txt | grep -A 30 8ccc

可能导致CPU占用率过高的场景与解决方案

正常情况:业务高峰
  • 优化、扩容
异常情况:
  • 无限循环
    • 尽量无循环
    • 让循环执行慢些,如sleep
  • 频繁GC
    • 降低GC频率
  • 频繁创建新对象
    • 合理使用单例
  • 序列化与反序列化
    • 选择合理的类库
  • 正则表达式
    • 减少字符串匹配期间执行的回溯
  • 频繁的线程上下文切换
    • 降低切换的频率(根据场景修改,一般复杂度较高)

你可能感兴趣的:(Linux,linux,运维,服务器)