云服务器 CPU 被打满?从 top 到进程溯源的排查顺序
【摘要】 云服务器突然变卡,top 里 CPU 长期接近 100%,业务延迟飙升,最常见的反应是“是不是被打了”或“是不是程序写炸了”。多数时候两者都可能,但先别重启。按下面顺序走,能在几分钟内把“谁在吃 CPU、为什么吃”说清楚。命令在 EulerOS、CentOS、Ubuntu 上都适用。 一、先确认是整机打满,还是个别核打满# 整体负载与 1/5/15 分钟平均uptime# 按核看利用率(按 ...
云服务器突然变卡,top 里 CPU 长期接近 100%,业务延迟飙升,最常见的反应是“是不是被打了”或“是不是程序写炸了”。多数时候两者都可能,但先别重启。按下面顺序走,能在几分钟内把“谁在吃 CPU、为什么吃”说清楚。命令在 EulerOS、CentOS、Ubuntu 上都适用。
一、先确认是整机打满,还是个别核打满
# 整体负载与 1/5/15 分钟平均
uptime
# 按核看利用率(按 1 看几秒)
mpstat -P ALL 1 5
load average远高于 CPU 核数,且mpstat多数核%usr/%sys都高:整机计算忙。- 只有一两个核打满:更像单线程热点、某个 worker、或中断绑核问题。
%iowait很高而%usr不高:瓶颈在磁盘/网络 IO,不是纯 CPU,后面别只盯进程。
同时看一眼内存,避免把 swap 颠簸误当成 CPU 问题:
free -h
vmstat 1 5
si/so 持续不为 0,说明在换页,先处理内存再谈 CPU。
二、用 top / pidstat 锁定进程
top -c
# 或更干净:
pidstat -u 1 5
在 top 里按 P 按 CPU 排序,记下:
- PID / 命令行(
-c显示完整命令) - 用户
%CPU是否接近或超过 100(多线程可超过单核)
对可疑 PID 再拆线程:
top -H -p <PID>
# 或
ps -L -p <PID> -o pid,tid,pcpu,comm
若某个线程独占一核,再结合程序日志或 pstack/gdb 看卡在哪(生产环境慎用 gdb,优先日志与采样)。
三、区分“业务本身忙”和“异常进程”
常见几类:
| 现象 | 更可能原因 | 下一步 |
|---|---|---|
| 业务进程 CPU 高,QPS/连接数也高 | 流量或慢查询导致算力不够 | 看接入层 QPS、慢日志、扩容或限流 |
| 陌生进程名、矿工特征、curl|bash | 入侵挖矿 | 断外连、保留样本、重装或从干净镜像恢复 |
kworker / softirq 偏高 |
网络或块设备中断风暴 | cat /proc/interrupts,查网卡丢包、异常连接 |
java/python 偶发尖刺 |
GC、正则灾难、死循环 | 结合应用 APM / 线程栈 |
对外连快速摸底(只看、不乱杀):
ss -antp | head
# 若允许且已安装:
# nethogs 或 iftop 观察瞬时流量
四、采样比“猜”更省时间
对用户态热点,可用短时采样(需安装 perf,且内核允许):
# 示例:采 10 秒,看热点符号(容器/精简镜像可能缺符号)
sudo perf top -p <PID>
没有 perf 时,至少保留:
ps -efww完整命令行- 应用最近错误日志
dmesg -T | tail是否有 OOM、硬件错误
五、处理原则(避免越修越糟)
- 先限流/摘流,再杀进程。 直接
kill -9可能丢数据;对业务进程优先优雅重启或缩容异常实例。 - 挖矿或不明进程: 记下文件路径与启动方式(
systemd、crontab、~/.bashrc),清理持久化后再判断是否重装。 - 确认是容量问题: 垂直升配只是缓兵之计,配合水平扩展与缓存/异步化更稳。
- 改完再验证: 用同一组
mpstat/pidstat对比,确认%CPU与延迟都下来,而不是只看瞬间。
六、可放进巡检的三条
# 1) 是否有持续高 CPU 进程
pidstat -u 1 3 | awk '$8+0 > 50 {print}'
# 2) 负载是否长期压过核数
# 结合 nproc 与 uptime
# 3) 是否在疯狂换页
vmstat 1 3
把这三条塞进监控告警(CPU > 80% 持续 5 分钟、load > 核数×1.5、swap 增长),比出事后再 SSH 上去瞎猜可靠得多。
CPU 打满不是结论,只是起点。先分清整机还是单核、用户态还是 IO,再锁定 PID 与线程,最后才决定限流、扩容还是清异常进程。按这个顺序,大多数“机器卡死”都能在一两次登录里定位到可执行的下一步。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)