Linux平台排查CPU占用高的进程和线程指南

基础排查工具

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

排查流程总结

  1. 定位高CPU进程:使用top/htop/ps找出问题进程
  2. 分析进程线程:top -H/ps -T查看线程情况
  3. 检查调用栈:使用gdb/perf分析执行路径
  4. 监控系统调用:strace跟踪具体行为
  5. 检查依赖资源:查看是否因等待IO/锁等导致
  6. 分析日志:检查系统日志和应用日志

优化建议

  1. 算法优化:改进高时间复杂度算法
  2. 并发控制:调整线程池大小,避免过多线程竞争
  3. 缓存机制:减少重复计算
  4. 异步处理:将阻塞操作改为异步
  5. 分批处理:大数据集分片处理
  6. 升级版本:使用修复了性能问题的新版本

通过以上方法,您可以系统性地排查和解决Linux系统中的高CPU占用问题。对于生产环境,建议建立长期监控机制,以便及时发现性能问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值