Linux服务器CPU使用率监控与分析指南
常用命令工具及用法
| 工具名称 | 功能特点 | 典型参数示例 | 输出解读要点 |
|---|---|---|---|
top |
实时动态显示进程级资源占用情况 | h/H隐藏线程/显示线程;P按CPU排序 |
PID、%CPU列直接反映单个进程的CPU消耗百分比 |
htop |
增强版top(需安装),支持彩色界面和垂直滚动条 | F5进入树状模式展示进程关系 | 可直观查看进程父子层级关系 |
mpstat |
统计多核CPU的整体利用率(来自sysstat包) | -P ALL显示所有逻辑处理器数据 |
%idle越低说明系统越繁忙 |
sar -u |
历史数据采集分析工具,适合排查周期性性能波动 | -f /var/log/sa/saXX加载历史记录 |
关注user/nice/system/idle四者的占比变化规律 |
vmstat 1 5 |
每秒刷新一次系统级指标(运行队列长度、上下文切换次数等) | 间隔时间设为1秒共执行5次 | r列>cpu核心数表明存在严重等待现象 |
ps -eo %cpu,pid,cmd --sort=-%cpu | head |
快速定位高耗能进程 | 管道组合实现排序过滤 | 首行即为当前最消耗CPU的应用及其PID |
关键指标解析
- 用户态(user) vs 内核态(system)
-
70% user:正常业务负载特征

-
30% system:可能涉及频繁I/O中断或驱动问题
-
- 上下文切换次数(cs)
单核CPU每秒超过数千次切换需警惕锁竞争
- 就绪队列长度(runq)
持续>CPU核心数表明调度器压力过大

- 中断请求(intr/s)
硬件设备异常可能导致被动式CPU唤醒
典型场景诊断流程
发现CPU持续高位 → 执行以下步骤: 1️⃣ top找出具体进程PID 2️⃣ strace追踪该进程系统调用频率 3️⃣ perf record -g <PID>进行热点函数分析 4️⃣ dmesg检查是否有驱动报错日志 5️⃣ free确认是否存在内存不足引发的交换行为
优化策略对照表
| 现象特征 | 根本原因推测 | 解决方案示例 |
|---|---|---|
| 某Java进程长期占满单核 | JVM垃圾回收机制不合理 | 调整堆内存参数+启用G1收集器 |
| ksoftirqd线程CPU飙升 | 网卡中断模式设置为MSI-X失效 | echo ‘on’ > /proc/sys/net/core/netdev_budget_usecs |
| pdflush进程反复唤醒 | Dirty Page过多导致写回延迟 | 增大vm.dirty_ratio值减少强制刷盘频率 |
| kernel:sched频现日志 | CPU亲缘性设置不当造成迁移开销 | taskset命令绑定特定物理核心运行关键进程 |
相关问题与解答
Q1: 为什么有时总CPU使用率超过100%?
A: 这是多核环境下的正常现象,例如双路24核服务器共有48个逻辑处理器,此时总利用率可以累积到4800%,单个进程仍只能最大占用单核100%,但所有进程的总和会突破物理核心数量的限制。
Q2: 如何判断是否是DDoS攻击导致的高CPU?
A: 典型特征包括:①网络子系统的软中断(NET_RX/NET_TX)占比突增;②conntrack表项暴增;③大量SYN_RECV状态连接堆积,可通过ss -ntp | grep SYN和iptables -L -v进一步验证流量特征,建议启用ARPF防护机制并配置速率限制

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/133151.html