腾讯云轻量应用服务器(Lightweight Application Server)出现 CPU 占用过高导致卡顿,通常是因为突发流量、恶意攻击、后台任务异常或配置不当引起的。
请按照以下步骤由浅入深进行排查和解决:
1. 紧急缓解措施(先恢复业务)
如果当前服务器已经无法访问或响应极慢,优先执行以下操作:
- 重启服务:如果是某个特定进程(如 Web 服务、数据库)卡死,尝试重启该服务而非整机重启。
# 示例:重启 Nginx systemctl restart nginx - 强制杀高占用进程:找到占用最高的进程并终止它。
top -c # 按 Shift + P 按 CPU 排序,记下 PID,然后 kill kill -9 <PID> - 临时升级配置:在腾讯云控制台直接升级实例配置(例如从 2 核升级到 4 核),这是解决资源瓶颈最快的方法,适合短期应对突发流量。
2. 定位问题根源
登录服务器后,使用以下命令分析具体是哪个进程或类型占用了 CPU:
A. 查看整体负载
uptime
# 查看 load average,如果数值超过 CPU 核心数,说明系统过载
B. 找出“元凶”进程
top
# 进入界面后:
# 1. 按 'Shift + P' 按 CPU 使用率排序
# 2. 按 'Shift + M' 按内存排序
# 3. 观察 %CPU 列,确认是哪个程序(如 java, python, mysql, php-fpm 等)
- 如果是未知进程:可能是X_X病毒(如
xmrig,kdevtmpfsi等)。 - 如果是已知服务:检查是否配置了错误的循环逻辑、死锁或并发过高。
C. 检查是否有异常连接
netstat -antp | grep ESTABLISHED | wc -l
# 如果连接数异常巨大,可能是遭受 DDoS 或 CC 攻击
3. 针对性解决方案
场景一:遭遇攻击(CC 攻击/X_X病毒)
- 现象:出现陌生进程名,CPU 长期 100%,网络流量异常。
- 解决:
- 切断连接:在腾讯云控制台开启安全组规则,仅开放必要端口(如 80, 443, 22),封禁其他所有 IP。
- 查杀病毒:安装杀毒软件(如
ClamAV)或使用云安全的“主机安全”功能扫描。 - 清理文件:删除发现的恶意脚本(通常在
/tmp,/var/tmp或用户家目录)。 - 修改密码:立即修改 root 及所有用户密码,并更换 SSH 密钥。
场景二:应用代码逻辑问题
- 现象:特定业务高峰期 CPU 飙升,非业务时间正常。
- 解决:
- 优化代码:检查是否存在死循环、未优化的 SQL 查询(全表扫描)、内存泄漏。
- 调整并发:如果是 PHP/Java/Node.js,适当调小最大工作进程数(如
php-fpm的pm.max_children)。 - 增加缓存:引入 Redis 缓存热点数据,减少数据库和计算压力。
场景三:定时任务堆积
- 现象:每天固定时间 CPU 升高。
- 解决:
- 检查
crontab -l,看是否有重复执行的脚本或耗时过长的任务。 - 将耗时的备份、日志切割任务调整到业务低峰期,或改为异步处理。
- 检查
场景四:系统配置不合理
- Swap 交换分区不足:当物理内存耗尽时,系统频繁使用 Swap,会导致 CPU 飙升。
- 检查:
free -h - 解决:增加 Swap 空间或优化内存分配。
- 检查:
4. 腾讯云特有工具与防护
充分利用腾讯云提供的免费或低成本工具:
- 启用“云防火墙”或“安全组”:
在控制台限制 IP 访问来源,防止恶意扫描。 - 使用“云监控”告警:
设置 CPU 利用率 > 80% 持续 5 分钟触发短信/邮件告警,以便提前介入。 - 重装系统(最后手段):
如果怀疑系统被深度植入木马且无法清除,最彻底的方法是重装系统镜像(注意:需提前备份数据!)。
5. 长期优化建议
- 架构拆分:如果单台轻量服务器扛不住,考虑将数据库、静态资源分离,或使用负载均衡(CLB)分摊流量。
- 自动弹性伸缩:如果业务有周期性波动,可搭配云函数或更高级的云产品实现自动扩缩容。
- 定期维护:定期更新系统补丁,清理无用日志文件(
journalctl --vacuum-time=7d)。
总结建议:
先通过 top 锁定进程,区分是外部攻击还是内部故障。如果是攻击,优先封 IP 和杀进程;如果是代码问题,优化逻辑或暂时升级配置。对于轻量服务器,数据备份永远是第一优先级,在进行任何高风险操作前请务必确认数据安全。
ECLOUD博客