插件窝 干货文章 linux如何排查cpu持续飙高原因

linux如何排查cpu持续飙高原因

使用 bash CPU 情况 295    来源:    2025-05-14

Linux CPU持续飙高排查指南

当Linux系统出现CPU持续飙高的情况时,可以按照以下步骤进行排查和解决:

1. 快速查看CPU使用情况

top

htop

这些命令会显示实时的CPU使用情况,按CPU使用率排序。

2. 识别高CPU进程

使用top命令

  • 运行top后按Shift+P按CPU排序
  • 查看%CPU列找出占用高的进程

使用ps命令

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head

使用pidstat监控特定进程

pidstat -u 1 5

3. 分析进程详细信息

对于识别出的高CPU进程,可以进一步分析:

# 查看进程详细信息
ps -fp <PID>

# 查看进程的线程情况
top -H -p <PID>

4. 分析线程堆栈

对于Java应用:

jstack <PID> > thread_dump.log

对于其他应用:

gdb -p <PID>
(gdb) thread apply all bt
(gdb) detach
(gdb) quit

5. 使用perf进行性能分析

# 安装perf(如未安装)
sudo apt install linux-tools-common linux-tools-generic

# 采样CPU使用情况
sudo perf top -p <PID>

# 记录性能数据
sudo perf record -p <PID> -g -- sleep 30
sudo perf report

6. 检查系统负载

uptime
cat /proc/loadavg

7. 检查CPU核心温度(可能因过热降频)

sensors

8. 检查中断和软中断

cat /proc/interrupts
cat /proc/softirqs

9. 使用vmstat查看系统整体状况

vmstat 1 5

10. 使用sar查看历史CPU使用情况

sar -u

常见原因及解决方案

  1. 应用程序bug:修复应用程序代码中的死循环或低效算法
  2. 配置不当:调整应用程序配置参数
  3. 资源竞争:优化锁的使用,减少线程争用
  4. IO等待:检查磁盘IO性能(iostat)
  5. 内存不足:检查内存使用情况(free -m),可能导致频繁swap
  6. 中断风暴:检查网络或硬件设备的中断情况

自动化监控工具

对于长期监控,可以考虑: - Prometheus + Grafana - Nagios - Zabbix - Datadog

通过以上步骤,通常可以定位到CPU飙高的根本原因并采取相应措施。