现象

用户在浏览器访问宝塔面板时,页面加载极慢、频繁超时或显示 502 错误。同时,通过云平台监控或 SSH 登录服务器发现,CPU 使用率长期维持在 90% 以上,甚至达到 100%。此时服务器响应迟缓,执行其他命令(如 ls、ps)也可能出现明显延迟。这种情况通常不是网络问题,而是服务器内部资源被耗尽。

原因

CPU 占满通常由以下几类原因引起:一是宝塔面板自身的后端进程(如 BT-Panel 进程)出现内存泄漏或死循环;二是网站代码存在死循环或高耗时逻辑,导致 PHP-FPM 或 Nginx 工作进程飙升;三是数据库(MySQL/MariaDB)执行了复杂的慢查询,导致数据库进程 CPU 占用极高;四是服务器遭到恶意挖矿脚本攻击,隐藏的后台进程大量消耗算力;五是系统日志写入过快或磁盘 I/O 瓶颈引发的 CPU 等待时间增加。

先自查(3 分钟)

首先确认服务器是否在线。如果 SSH 无法连接,说明系统可能已假死,需立即使用奇异互动会员中心「云服务器详情页」中的「VNC 控制台」进行救援登录。若能 SSH 登录,立即执行 top 命令查看实时资源占用。观察 PR 列(优先级)和 %CPU 列,找到占用最高的 PID(进程 ID)。同时检查内存使用情况,若 Swap 分区使用率极高,说明内存不足导致频繁交换,也会拖慢 CPU 响应速度。

解决步骤

第一步,定位具体进程。使用 top 命令查看 CPU 占用最高的进程 ID,然后使用 ps 命令查看该进程的详细信息,包括所属用户、启动命令和父进程。这一步是为了确认是系统服务、Web 服务还是未知脚本。

top -c

第二步,根据 PID 查询进程详情。将上一步找到的 PID 替换命令中的 1234,查看该进程的具体执行路径和参数。如果是 PHP 进程,通常对应某个网站目录;如果是 unknown 或异常路径,需警惕恶意脚本。

ps -fp 1234

第三步,如果是宝塔面板自身卡顿。尝试重启宝塔面板服务。注意:重启面板服务会短暂中断面板访问,但不会停止网站运行。执行以下命令重启面板。

bt restart

第四步,如果是 PHP 或 Nginx 占用高。检查网站代码是否存在死循环。临时重启 PHP-FPM 和 Nginx 以释放资源。注意:重启 Web 服务会导致网站短暂不可用,建议在业务低峰期操作。

systemctl restart php-fpm
systemctl restart nginx

第五步,如果是 MySQL 占用高。登录 MySQL 查看当前运行的慢查询,并 kill 掉耗时的连接。注意:强制终止数据库连接可能导致数据一致性风险,仅在紧急情况下使用。

mysql -u root -p -e "show processlist;"

第六步,排查恶意脚本。如果发现 PID 对应的进程路径不在常规软件目录(如 /tmp、/var/tmp 下的可执行文件),立即删除该文件并检查 crontab 计划任务。注意:删除文件前请确认其非系统关键文件,建议先备份。

crontab -l
rm -f /tmp/malicious_file

验证

执行完上述步骤后,再次运行 top 命令,观察 CPU 使用率是否回落到正常水平(通常低于 30%)。尝试重新访问宝塔面板,确认页面加载速度恢复正常。检查网站是否能正常访问,确保重启服务未造成业务中断。若 CPU 再次迅速飙升,说明根因未消除,需进一步分析代码或安全日志。

预防

定期更新宝塔面板至最新版本,修复已知漏洞。启用宝塔面板的「软件商店」中的「安全」插件,定期扫描恶意文件和异常登录。为数据库设置合理的连接数和超时时间,避免单一慢查询拖垮整个服务。配置监控告警,当 CPU 持续高于 80% 时自动通知运维人员。避免在服务器高峰期进行大批量文件操作或数据库备份。

在奇异互动如何最快处理

若 SSH 无法连接或 VNC 登录后仍无法操作,可直接在奇异互动会员中心进入「云服务器详情页」,点击「重启」按钮强制重启服务器,这能解决大部分因进程假死导致的卡顿。若重启后问题依旧,或发现 CPU 持续满载且无法通过命令定位,请提交工单。提交工单时,请在描述中附上:服务器 IP、问题发生时间点、top 命令截图(包含 PID 和 CPU 占用)、以及已执行的排查步骤。工单入口位于「会员中心 → 工单」,提交时请务必关联该云服务器产品,以便工程师快速定位实例。