轻量应用服务器(Lighthouse)CPU 长期飙高,通常不是“玄学”,而是资源瓶颈或配置不当导致的。别急着重启,先按下面的逻辑排查,从最可能的原因入手。
1. 确认是不是“被卖惨”了
很多新手用户买的轻量服务器是突发性能实例(Burstable Instances),比如 T6、T3 等类型。这类实例有 CPU 积分机制:
- 平时低负载时:积累 CPU 积分。
- 高负载时:消耗积分,但一旦积分耗尽,CPU 会被限制在基准性能(通常是 10%-20%),表现为系统极慢,且监控显示 CPU 使用率虽然不高,但实际运行卡顿。
- 检查方法:登录腾讯云控制台 -> 轻量应用服务器 -> 监控页面,查看“CPU 积分余额”。如果积分归零,你需要升级实例规格或购买更多积分,否则怎么优化代码都没用。
2. 定位“真凶”进程
如果积分充足,那确实是 CPU 跑满了。通过 SSH 登录服务器,执行以下命令找出占用最高的进程:
# 实时查看 CPU 排名前五的进程
top -o %CPU
# 或者使用更直观的 htop(需要安装:yum install htop / apt install htop)
htop
重点关注 USER 列和 COMMAND 列。常见嫌疑人:
- Java 应用:堆内存设置不合理导致频繁 Full GC,或者线程死锁。
- Python/Node.js:无限循环、未捕获的异常重试、内存泄漏。
- 数据库:MySQL/PostgreSQL 出现慢查询,全表扫描。
- XX病毒:如果你发现有个叫
kdevtmpfsi、xmrig或者随机字母组合的进程,且不在你的业务列表中,大概率是中招了。
3. 常见场景及解决方案
A. 网站/应用访问量突增
如果是正常业务流量上涨:
- 扩容:轻量服务器适合中小站点,如果确实需要更高并发,考虑迁移到 CVM(云服务器)+ CLB(负载均衡)。
- 缓存:检查是否缺少缓存层。Nginx 开启 gzip 压缩、静态资源 CDN 提速、后端加 Redis 缓存热点数据。
- 代码优化:检查是否有 N+1 查询问题,日志是否打印过多 DEBUG 信息(生产环境务必关闭 DEBUG 日志)。
B. 数据库慢查询
MySQL 是 CPU 杀手的高发区。
- 开启慢查询日志:
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2; -- 超过2秒的查询记录 - 分析日志:使用
mysqldumpslow工具分析哪些 SQL 最耗资源。 - 加索引:90% 的 CPU 飙升是因为没建索引导致全表扫描。用
EXPLAIN分析执行计划。
C. 安全事件(XX/CC 攻击)
- XX:立即 kill 掉可疑进程,查杀后门文件(通常在
/tmp,/var/tmp,/dev/shm下)。修改 root 密码,检查 crontab 定时任务是否有异常。 - CC 攻击:如果大量请求来自同一 IP 段,且访问的是动态页面(如 login.php, api接口):
- 在腾讯云控制台启用“Web 应用防火墙”(WAF)或轻量服务器的“安全组”策略,封禁恶意 IP。
- Nginx 配置连接数限制:
limit_conn_zone $binary_remote_addr zone=addr:10m; server { location / { limit_conn addr 10; # 每个 IP 最多 10 个并发 } }
D. 系统级问题
- 僵尸进程:
top中看到大量Z状态的进程,可能是父进程没处理好子进程退出信号。 - 内核恐慌/驱动问题:较少见,但如果所有进程 CPU 都很低,总 CPU 却很高,可能是中断处理或驱动程序问题,需重启观察。
4. 预防与优化建议
- 设置告警:在腾讯云控制台为轻量服务器设置 CPU 使用率 > 80% 持续 5 分钟的告警,短信/微信通知,避免事后诸葛亮。
- 自动化脚本:写一个简单的 shell 脚本,当 CPU > 90% 时自动记录日志并重启关键服务(谨慎使用,避免雪崩)。
- 定期维护:
yum update/apt upgrade保持系统补丁最新。- 清理无用日志:
journalctl --vacuum-time=7d或手动删除/var/log下的旧日志。
- 架构升级:如果轻量服务器长期满负荷,说明业务已超出其设计边界。轻量服务器主打“简单、便宜”,不适合高并发、高可用场景。此时应规划迁移至 CVM + RDS + CLB 的标准云架构。
总结
先查积分,再查进程,最后看日志。大多数情况下,要么是高流量没做缓存,要么是数据库没索引,要么是中病毒。解决完这些,CPU 自然降下来。
云技术博客