遇到 CVM CPU 持续 100%,优先通过云监控确认趋势,登录系统定位高占用进程,区分是业务高峰还是异常脚本,再决定扩容或优化。
先说结论:CPU 满载通常是业务流量突增、代码死循环或安全入侵导致,先止血定位进程,再根据业务属性决定扩容或修复。
- 先定位:通过 top 命令找到占用最高的 PID,结合云监控判断时间点。
- 先做:确认进程身份,异常进程直接隔离,业务进程考虑限流或升级配置。
- 再验证:观察云监控 CPU 曲线是否回落,系统负载是否恢复正常。
环境准备与依赖安装
部分监控命令依赖系统工具包,默认可能未安装。执行前请确保具备 root 权限。
# CentOS/RedHat 安装 sysstat 工具包
yum install sysstat -y
# Ubuntu/Debian 安装 sysstat 工具包
apt-get install sysstat -y
核心命令速查
# 查看整体负载和 CPU 占用最高的进程
top -b -n 1 | head -20
# 查看特定 PID 的线程级 CPU 占用
ps -mp [PID] -o THREAD,tid,time
# 查看 CPU 等待 IO 的情况(若 iowait 高)
iostat -x 1 5
分步排查与处置
1. 云端初步判断
登录腾讯云控制台,进入云监控页面,查看 CPU 使用率曲线。确认是突发尖峰还是持续高位,对比网络流入流出带宽,判断是否伴随流量攻击或业务高峰。
2. 登录系统定位
使用 SSH 登录实例,执行top命令。按P键按 CPU 使用率排序,记录占用最高的进程 PID 和命令名。注意区分是 java、php、python 等业务进程,还是未知名称的系统进程。
3. 分析进程行为
若为业务进程,检查应用日志是否有报错或慢查询。若为未知进程,检查其启动路径和网络连接,排查是否被入侵。可使用ls -l /proc/[PID]/exe查看进程 executable 路径。
4. 执行处置措施
异常进程:保留证据后终止进程,修复安全漏洞,修改密码。业务进程:临时重启服务释放资源,长期需通过控制台变更规格或调整系统参数。
系统配置与扩容优化
1. 腾讯云控制台扩容
登录腾讯云控制台,进入云服务器 CVM > 实例列表,找到目标实例,点击更多 > 调整配置。根据业务需求升级 CPU 核数或内存,注意升降配可能需要重启实例。
2. 进程优先级调整
对于非核心业务进程,可降低其优先级以减少 CPU 争抢:
# 将 PID 为 1234 的进程 nice 值调整为 10(范围 -20 到 19,越大优先级越低)
renice -n 10 -p 1234
3. 内核参数优化
针对高并发场景,可适当调整内核参数缓解压力:
# 示例:调整最大连接队列长度
sysctl -w net.core.somaxconn=1024
# 示例:降低 swap 使用倾向
sysctl -w vm.swappiness=10
代码层面常见高占用场景
- 死循环:代码逻辑缺失退出条件,导致线程持续占用 CPU。
- 正则回溯:复杂正则表达式在特定输入下产生指数级回溯。
- 频繁 GC:Java 等语言内存不足导致频繁 Full GC,消耗大量 CPU 资源。
- 序列化开销:高频大对象序列化/反序列化操作。
验证与复盘
处置后,保持top命令运行观察几分钟,确认目标进程 CPU 占比下降。回到腾讯云控制台云监控页面,确认 CPU 使用率曲线回落至正常水位线,且系统负载(Load Average)降至 CPU 核心数以下。
常见坑
- 直接 kill 掉系统关键进程(如 systemd、sshd)导致无法登录。
- 忽略 iowait 指标,误将磁盘 IO 瓶颈当作 CPU 计算瓶颈处理。
- 未保留日志就重启服务,导致后续无法复盘问题根因。
- 只重启实例不修漏洞,导致挖矿脚本再次运行。
参考来源
- 腾讯云官方文档 - 云服务器 CVM:https://cloud.tencent.com/document/product/213
- 腾讯云官方文档 - 云监控:https://cloud.tencent.com/document/product/248