CPU长期满载会导致VPS响应缓慢、SSH卡顿、网站加载超时。搬瓦工KiwiVM面板如果检测到CPU持续超限,甚至可能暂停VPS。本文介绍如何排查CPU高占用原因并优化。
# 实时查看CPU使用率和进程排名
top
# 更友好的交互界面(需安装)
apt install htop -y
htop
# 查看CPU核心数
nproc
# 查看CPU信息
lscpu
在top中,按"P"键按CPU使用率排序,快速找到占用最高的进程。关注%CPU列,如果单个进程超过90%,就是问题所在。
如果看到不认识的进程名占用大量CPU,可能是被入侵安装了挖矿程序:
# 查看可疑进程详情
ls -la /proc/PID/exe # 查看进程可执行文件位置
cat /proc/PID/cmdline # 查看进程启动命令
# 常见挖矿进程名
# kdevtmpfsi, kinsing, xmrig, cpuminer, minergate
# 杀死可疑进程
kill -9 PID
# 检查crontab是否有恶意计划任务
crontab -l
cat /etc/crontab
ls /etc/cron.d/
如果确认被入侵,建议在KiwiVM面板重装系统,并更改SSH端口和使用密钥认证。
# 查看MySQL正在执行的查询
mysqladmin processlist -u root -p
# 查看慢查询
mysql -u root -p -e "SHOW VARIABLES LIKE 'slow_query_log';"
# 优化措施
# 1. 开启慢查询日志
# 2. 优化数据库索引
# 3. 调整innodb_buffer_pool_size
# 4. 安装查询缓存
# 查看PHP-FPM进程状态
systemctl status php8.2-fpm
# 查看PHP-FPM配置
cat /etc/php/8.2/fpm/pool.d/www.conf
# 优化措施:限制worker进程数
# pm = dynamic
# pm.max_children = 5 # 1GB内存建议5个
# pm.start_servers = 2
# pm.min_spare_servers = 1
# pm.max_spare_servers = 3
# 查看当前连接数
ss -s
# 查看连接最多的IP
ss -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
# 如果某个IP连接数异常多,用iptables封锁
iptables -A INPUT -s 恶意IP -j DROP
apt install cpulimit -y
# 限制某进程最多使用50% CPU
cpulimit -p PID -l 50
# 后台运行限制
cpulimit -p PID -l 50 -b
# 降低进程优先级(值越大优先级越低)
renice 19 -p PID
# 以低优先级启动程序
nice -n 19 ./your-program
设置简单的CPU告警脚本:
#!/bin/bash
# /root/cpu-monitor.sh
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d. -f1)
if [ "$CPU_USAGE" -gt 80 ]; then
echo "CPU使用率: ${CPU_USAGE}%" | mail -s "VPS CPU告警" your@email.com
fi
# 添加到crontab每5分钟检查
# */5 * * * * /root/cpu-monitor.sh
Tip: 如果CPU确实不够用,考虑升级到更高配置的方案。查看搬瓦工全部在售方案。