当轻量服务器(如腾讯云轻量应用服务器、阿里云轻量服务器等)出现 CPU 占用过高导致系统卡顿时,可以按照以下步骤排查和解决:
一、初步检查:确认CPU占用情况
-
登录服务器
使用 SSH 登录到你的轻量服务器。 -
查看CPU使用率
执行以下命令查看实时CPU占用情况:top或更直观的:
htop # 如果未安装,可用 yum install htop 或 apt install htop 安装观察
%CPU列,找出占用最高的进程。
二、定位高CPU占用的进程
-
在
top中排序- 运行
top - 按下大写
P(Shift + P),按CPU使用率排序 - 查看哪个进程(PID)占用最高
- 运行
-
记录关键信息
记下进程名(如php-fpm,node,mysql,java等)、用户、PID 和命令路径。 -
进一步分析进程
ps aux | grep <PID>或查看详细信息:
cat /proc/<PID>/status
三、常见原因及解决方案
1. 网站/应用负载过高
- 表现:Web服务(Nginx/Apache)、PHP、Node.js、Java等进程持续高占用。
- 解决方法:
- 优化代码逻辑,减少数据库查询或循环操作。
- 启用缓存(Redis、Memcached、OPcache等)。
- 使用 CDN 减少源站压力。
- 限制并发连接数或请求频率(如 Nginx 的 limit_req)。
2. 恶意程序或病毒
- 表现:陌生进程(如
kdevtmpfsi,systemd,xmrig等)占用大量CPU。 - 解决方法:
- 终止可疑进程:
kill -9 <PID> - 删除对应文件:
rm -f /tmp/kdevtmpfsi # 示例路径 - 检查定时任务:
crontab -l crontab -e # 删除可疑任务 - 检查开机启动项和服务:
systemctl list-unit-files --type=service | grep enabled - 安装安全工具扫描(如
rkhunter,clamav)或使用云厂商的云安全中心。
- 终止可疑进程:
3. 数据库性能问题
- 表现:
mysqld或postgres高CPU。 - 解决方法:
- 优化慢查询:开启慢查询日志,使用
EXPLAIN分析SQL。 - 添加索引,避免全表扫描。
- 调整数据库配置(如缓冲区大小)。
- 考虑升级数据库版本或迁移到更高配置实例。
- 优化慢查询:开启慢查询日志,使用
4. 定时任务或脚本异常
- 表现:某个脚本无限循环或频繁执行。
- 解决方法:
- 检查
crontab -l和/etc/crontab - 查看日志
/var/log/cron确认执行频率 - 修复脚本逻辑或临时注释任务测试
- 检查
5. 资源不足(服务器配置过低)
- 轻量服务器通常为1核2G,不适合高并发场景。
- 解决方法:
- 升级服务器配置(如升级到2核4G)
- 使用负载均衡+多台服务器分流
- 静态资源分离到对象存储(如COS、OSS)
四、预防措施
-
监控与告警
- 使用云厂商自带监控(如腾讯云监控、阿里云云监控)
- 安装 Prometheus + Grafana 或 Zabbix 做长期监控
-
定期维护
- 更新系统和软件补丁
- 清理日志文件(如 Nginx、MySQL 日志)
- 备份重要数据
-
限制资源使用
- 使用
cgroups或systemd限制某些服务的CPU使用 - 例如限制某个服务最多使用50% CPU
- 使用
五、紧急处理建议
- 若服务器完全卡死无法操作:
- 使用云平台的 VNC控制台 登录(绕过SSH)
- 强制重启服务器(最后手段)
- 重启后立即排查日志(
/var/log/messages,journalctl)
六、推荐命令汇总
top # 实时查看CPU占用
htop # 更友好的top(需安装)
ps aux --sort=-%cpu # 按CPU排序列出所有进程
iotop # 查看磁盘IO(可能间接导致卡顿)
vmstat 1 # 查看系统整体状态(CPU、内存、IO)
sar -u 1 3 # 查看历史CPU使用(需安装sysstat)
journalctl -f # 查看系统日志
✅ 总结:
CPU占用过高通常是应用负载大、代码效率低、存在病毒或配置不足导致。通过 top 定位进程,结合日志和业务逻辑分析,大多数问题可快速解决。若经常发生,建议升级服务器或优化架构。
如有具体进程名称或日志片段,可提供进一步诊断。
CLOUD技术笔记