直接给结论:CPU 长时间跑满,多数情况不是被挖矿,而是你自己的程序死循环、备份任务或爬虫在吃资源;只有出现”不认识的进程名 + 陌生外联 IP + 你没建过的定时任务”这几条同时出现,才要按入侵处理。所以第一步永远不是重启,而是先弄清是谁在占用。
第一步:先分清是”业务跑满”还是”异常占用”
登录服务器看一眼就够:Linux 用 top(按 P 键按 CPU 排序)或 htop,Windows 用任务管理器切到”详细信息”看 CPU 列。重点看三件事——进程名认不认识、占用是不是长期不降、进程的启动时间是不是很新。如果吃 CPU 的是你熟悉的 nginx、java、mysql、node,那多半是业务量上来了或者程序里有慢循环、慢 SQL,属于调优问题;如果进程名是一串随机字母数字、可执行文件躲在 /tmp 或 /dev/shm 下,就要紧张起来了。
第二步:判断是不是被入侵挖矿
挖矿和入侵有几个很典型的特征,中两条以上基本可以确诊:
- CPU 长期贴着 100% 降不下来,但业务本身没有明显变化;
- 用
netstat -antp能看到进程连着陌生的境外 IP,尤其是矿池常见的端口; crontab -l里出现你没写过的定时任务,机器一重启挖矿进程就自动回来;- 登录日志里有一堆来自陌生 IP 的失败尝试(
lastb、/var/log/secure),说明有人在爆破 SSH。
第三步:确认被入侵后怎么处理
- 先隔离、留证据。在控制台把安全组出入方向收紧,或直接把实例停机,并给系统盘做一份快照。别急着删文件,删了反而查不清根因。
- 再清干净。杀掉恶意进程、清掉恶意 cron、改掉全部密码和密钥。如果对”清得干不干净”没有把握,重装系统比手工擦洗更省心也更彻底。
- 最后堵入口。SSH 换掉默认 22 端口、只允许密钥登录、安全组只放行必要端口;数据库端口绝对不要对公网开放;把 Redis、Fastjson 这类老组件该打补丁的打上。
如果查下来只是业务自己跑满,处理方向完全不同:找慢 SQL 和死循环、看是不是被爬虫刷、把图片和静态资源丢给 CDN 或对象存储分流,实在扛不住再考虑升配。腾讯云的应对思路一模一样——安全组收敛、快照留证、重装系统,只是控制台上的入口位置不同,概念可以直接搬过去。
注意:
- 别一发现 CPU 高就立刻重启。重启会让内存里的进程和连接记录全部消失,排查难度反而更大。先 top 截个图、把进程名和路径记下来。
- 被入侵过的机器不要再当”干净机器”继续跑业务。很多人杀完进程就当没事,几天后又被挖回来,根因通常是弱密码或没打补丁的老版本组件。
- 如果业务数据放在数据盘上,重装系统不会动数据盘,但动手前务必确认数据盘已正确挂载、且有可用备份,避免”清干净了、数据也没了”。
总结:CPU 跑满先查进程——认得的进程按性能调优处理,不认得的进程一律按入侵处理。套路就是隔离留证、清干净、堵入口这三步,加上平时改端口、用密钥登录、及时打补丁这几件小事,能挡掉绝大多数扫描和爆破。
CPU 飙高的常见原因对照
| 现象 | 大概率原因 | 建议动作 |
|---|---|---|
| 熟悉进程长期高占用 | 业务增长、慢 SQL、死循环 | 查日志调优、加 CDN、按需升配 |
| 陌生随机名进程 + 境外外联 | 被入侵、被挂挖矿 | 快照留证 → 重装 → 加固安全组 |
| 整点/定时突然飙高 | 备份、扫描、定时任务叠加 | 错峰执行、限制并发 |
以官方活动页实时价格为准,各家套餐和计费规则经常调整,下单前请以页面实际展示为准。
阿里云ECS服务器产品文档:参考-阿里云服务器ECS文档
腾讯云轻量服务器产品文档:参考-轻量应用服务器 文档中心
