基础排查工具
1. top命令 - 实时进程监控
top
- 操作指令:
- 按
P
:按CPU使用率排序 - 按
1
:显示每个CPU核心的使用情况 - 按
H
:切换显示线程视图 - 按
M
:按内存使用排序 - 按
q
:退出
- 按
2. htop命令 - 增强版top(需安装)
sudo apt install htop # Debian/Ubuntu
sudo yum install htop # CentOS/RHEL
htop
- 彩色界面,支持鼠标操作
- 树状显示进程关系
- 可直接杀死进程(F9)
3. ps命令 - 进程快照
# 查看CPU占用前10的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 10
# 查看特定进程的所有线程
ps -T -p <PID>
# 显示线程的CPU占用
ps -eLf --sort=-%cpu | head
高级排查工具
4. pidstat - 进程统计(sysstat包)
sudo apt install sysstat # 安装
pidstat -u 1 5 # 每1秒采样一次,共5次
pidstat -t -p <PID> 1 3 # 监控特定进程的线程
5. mpstat - 多核CPU统计
mpstat -P ALL 1 # 查看每个CPU核心的使用情况
6. perf - 性能分析
# 实时监控
sudo perf top
# 记录特定进程
sudo perf record -g -p <PID>
sudo perf report
线程级排查
7. 使用top查看线程
top -H -p <PID> # 查看特定进程的线程
8. 使用strace跟踪系统调用
strace -p <TID> -c # 统计线程的系统调用
strace -p <TID> # 实时跟踪
9. 查看进程的调用栈
# 安装gdb
sudo apt install gdb
# 生成线程堆栈
gdb -p <PID>
(gdb) thread apply all bt # 打印所有线程堆栈
(gdb) detach
(gdb) quit
自动化排查脚本
10. 快速定位高CPU进程
#!/bin/bash
echo "===== 高CPU进程 TOP5 ====="
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6
read -p "输入要分析的PID(直接回车跳过): " pid
if [ ! -z "$pid" ]; then
echo -e "\n===== 进程 $pid 的线程 ====="
ps -T -p $pid --sort=-%cpu
echo -e "\n===== 线程调用栈采样 ====="
sudo gdb -p $pid -batch -ex "thread apply all bt" 2>&1 | grep -v "^New" | head -n 50
echo -e "\n===== 系统调用统计 ====="
sudo strace -p $pid -c 2>&1 | tail -n +2
fi
系统级检查
11. 检查系统负载
uptime # 查看1/5/15分钟平均负载
vmstat 1 5 # 查看系统整体状态
dmesg # 检查内核日志
12. 检查中断和软中断
cat /proc/interrupts
cat /proc/softirqs
排查流程总结
- 定位高CPU进程:使用top/htop/ps找出问题进程
- 分析进程线程:top -H/ps -T查看线程情况
- 检查调用栈:使用gdb/perf分析执行路径
- 监控系统调用:strace跟踪具体行为
- 检查依赖资源:查看是否因等待IO/锁等导致
- 分析日志:检查系统日志和应用日志
优化建议
- 算法优化:改进高时间复杂度算法
- 并发控制:调整线程池大小,避免过多线程竞争
- 缓存机制:减少重复计算
- 异步处理:将阻塞操作改为异步
- 分批处理:大数据集分片处理
- 升级版本:使用修复了性能问题的新版本
通过以上方法,您可以系统性地排查和解决Linux系统中的高CPU占用问题。对于生产环境,建议建立长期监控机制,以便及时发现性能问题。