问题表现:
- top
或htop
命令显示一个或多个进程占用过高CPU
- 系统响应变慢
解决方法:
# 1. 找出高CPU进程
top
# 或
htop
# 或
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
# 2. 分析具体进程
strace -p [PID] # 跟踪系统调用
perf top -p [PID] # 性能分析
# 3. 如果是Java应用
jstack [PID] > thread_dump.txt # 获取线程堆栈
# 4. 临时降低优先级
renice 19 [PID]
问题表现:
- uptime
显示高负载值
- top
显示CPU使用率并不高
可能原因: - I/O等待(wa)高 - 大量进程等待CPU
解决方法:
# 1. 检查I/O等待
vmstat 1 # 查看wa列
iostat -x 1 # 查看磁盘I/O
# 2. 检查运行队列
sar -q 1 # 查看runq-sz值
# 3. 检查D状态进程
ps -eo stat,pid,cmd | grep "^D"
问题表现: - 系统自动降频 - 可能触发硬件保护关机
解决方法:
# 1. 查看CPU温度
sensors # 需要安装lm-sensors
cat /sys/class/thermal/thermal_zone*/temp
# 2. 检查频率调节器
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 3. 设置为节能模式
echo powersave | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 4. 清理风扇和散热片
问题表现: - 多核CPU中只有部分核心被使用 - 应用性能未随核心数增加而提升
解决方法:
# 1. 检查CPU核心是否启用
lscpu
cat /proc/cpuinfo
# 2. 检查进程的CPU亲和性
taskset -p [PID]
# 3. 设置进程的CPU亲和性
taskset -pc 0,1,2,3 [PID] # 绑定到核心0-3
# 4. 对于多线程应用,确保应用配置正确
问题表现: - CPU频率未达到标称值 - 性能低于预期
解决方法:
# 1. 查看当前频率
cat /proc/cpuinfo | grep MHz
# 2. 安装cpufreq工具
sudo apt install cpufrequtils # Debian/Ubuntu
sudo yum install kernel-tools # RHEL/CentOS
# 3. 查看频率调节器
cpufreq-info
# 4. 设置为性能模式
sudo cpufreq-set -g performance
问题表现: - 特定工作负载性能异常 - L1/L2/L3缓存命中率低
诊断方法:
# 使用perf工具分析缓存
sudo perf stat -e cache-references,cache-misses,LLC-loads,LLC-load-misses [command]
问题表现: - 多CPU插槽系统中内存访问延迟高 - 性能不一致
解决方法:
# 1. 检查NUMA状态
numactl --hardware
# 2. 绑定进程到特定NUMA节点
numactl --cpunodebind=0 --membind=0 [command]
# 3. 查看NUMA统计
cat /sys/devices/system/node/node*/numastat
# 实时监控
top
htop
glances
# 历史数据分析
sar -u # CPU使用率历史
sar -q # 负载历史
# 详细性能分析
perf top
perf stat
通过以上方法,可以有效地诊断和解决Linux系统中大多数CPU相关问题。