top -c
# 或
htop
# 或
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
strace -p <PID> -c
# 或
perf top
vmstat 1 5
# 或
sar -w 1 5
cpulimit -l 50 -p <PID>
可能原因:
解决方案:
# 检查上下文切换
pidstat -w 1 5
# 检查系统调用
perf stat -e 'syscalls:sys_enter_*' -a sleep 5
# 减少不必要的系统调用
# 调整内核参数
echo "kernel.sched_min_granularity_ns = 10000000" >> /etc/sysctl.conf
echo "kernel.sched_wakeup_granularity_ns = 15000000" >> /etc/sysctl.conf
sysctl -p
解决方案:
# 查看中断分布
cat /proc/interrupts
# 对于多队列网卡,调整中断亲和性
# 安装irqbalance或手动设置
echo 1 > /proc/irq/<IRQ_NUM>/smp_affinity
perf record -a -g sleep 10
perf report
# 安装bcc工具包后
/usr/share/bcc/tools/cpudist
/usr/share/bcc/tools/runqlat
/usr/share/bcc/tools/syscount
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg
系统监控:
定期维护:
性能调优:
资源限制:
通过以上步骤和方法,您应该能够有效诊断和解决Linux系统中CPU和Sys占用过高的问题。