宝塔面板CPU跑满排查

宝塔面板CPU跑满排查

  • admin admin
  • 2026-09-12
  • 3172
  • 0

宝塔面板CPU跑满排查是指通过检查服务器进程、网站日志、数据库查询、计划任务和安全状态,找出导致CPU使用率持续接近100%的异常进程或请求并加以处理。快速定位高占用进程登录宝塔面板后,先打开“监控”页面查看CPU占用曲线,确认是否持续跑满,再进入终端或使...

优惠价格:¥ 0.00
当前位置:首页 > 堡塔SSH终端 > 宝塔面板CPU跑满排查
详情介绍

宝塔面板CPU跑满排查是指通过检查服务器进程、网站日志、数据库查询、计划任务和安全状态,找出导致CPU使用率持续接近100%的异常进程或请求并加以处理。

快速定位高占用进程

登录宝塔面板后,先打开“监控”页面查看CPU占用曲线,确认是否持续跑满,再进入终端或使用SSH执行以下命令:

top-c

按大写 P 键按CPU占用率排序,观察排名靠前的进程,常见高占用进程包括 php-fpmmysqldnginxhttpdjavanode,也可能是伪装成系统进程的生产程序,记录进程PID和COMMAND列。

宝塔面板CPU跑满排查  第1张

再执行:

psaux--sort=-%cpu|head-20

可以直接列出CPU占用最高的20个进程,输出中可以看到用户、PID、CPU、内存、启动时间和完整命令,如果进程名似曾相识但路径可疑,需要进一步检查。

PHP-FPM 占用过高

如果发现 php-fpm 进程占用大量CPU,通常是网站代码中存在死循环、递归调用、大量计算或外部请求超时。

查看具体网站

多个PHP站点共用PHP-FPM时,需要确认是哪个网站引起的,宝塔面板的网站列表会显示每个站点的PHP版本,如果所有站点共用一个PHP版本,可以逐个暂停站点观察CPU变化。

开启PHP慢日志

进入宝塔面板 -> 软件商店 -> 已安装PHP -> 设置 -> 配置修改,找到慢日志相关配置:

slowlog=/var/log/php-slow.log
request_slowlog_timeout=5s

修改后重载PHP,慢日志会记录执行超过5秒的脚本路径和函数调用栈,帮助定位具体代码位置。

查看慢日志:

tail-f/var/log/php-slow.log

输出中会出现脚本路径和具体函数,直接定位到异常代码。

查看PHP进程

ps-ef|grepphp-fpm
psaux|grepphp-fpm|grep-vgrep

如果有很多进程一直处于 R 状态(运行中),并且同一个脚本反复出现,基本可以确定是代码问题。

跟踪进程

strace-pPID-c

跟踪某个高占用PHP进程,查看系统调用分布,如果是死循环,可能会看到大量 readwritepoll 等调用。

调整PHP-FPM参数

进入PHP设置 -> 性能调整,根据服务器内存适当调整:

  • max_children:最大子进程数,防止进程过多拖垮CPU

  • start_servers:启动进程数

  • min_spare_servers:最小空闲进程数

  • max_spare_servers:最大空闲进程数

  • max_requests:每个进程最大处理请求数,适当调小可以释放异常进程

例如在4核8G服务器上,可将 max_children 设为50,max_requests 设为500。

MySQL 占用过高

查看正在执行的SQL

通过宝塔面板的数据库管理或终端进入MySQL:

mysql-uroot-p
showprocesslist;

或直接执行:

mysql-uroot-p-e"showfullprocesslist"

查看 Time 列较大的SQL语句,分析是否缺少索引或数据量过大。

开启慢查询日志

在MySQL配置中开启慢查询:

slow_query_log=1
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=2

然后分析慢日志找出执行时间超过2秒的SQL。

查看MySQL线程

top-H-p$(pgrepmysqld)

查看mysqld进程内哪个线程占用CPU高,再结合 show processlist 定位SQL。

常见优化

  • 为常用查询字段添加索引

  • 清理历史数据

  • 修复损坏表:repair table 表名

  • 优化表:optimize table 表名

  • 检查是否有锁表:show open tables where in_use > 0

  • 修改数据库缓存配置,如 innodb_buffer_pool_size

如果业务数据量大,可考虑读写分离或增加服务器配置。

Nginx/Apache 占用过高

Nginx或Apache本身通常占用CPU不高,如果异常升高,多为请求量过大或遭受cc攻破。

查看访问日志

tail-f/www/wwwlogs/站点名.log

观察是否有大量相同URL请求、扫描请求或异常UA。

查看连接数

netstat-ntu|awk'{print$5}'|cut-d:-f1|sort|uniq-c|sort-nr|head-20

统计连接来源IP排名,如果某个IP连接数异常多,可以直接封禁。

配置防火墙和限流

在宝塔面板安装Nginx防火墙或Apache防火墙,开启CC防护、IP黑名单、频率限制、UA过滤、防扫描等功能。

在网站配置中增加:

limit_req_zone$binary_remote_addrzone=req_one:10mrate=10r/s;
limit_conn_zone$binary_remote_addrzone=conn_one:10m;

并在server块中引用:

limit_reqzone=req_oneburst=20nodelay;
limit_connconn_one20;

检查代理和缓存

如果网站有动态接口频繁请求,可配置缓存或CDN,减少源站压力。

计划任务和脚本异常

宝塔面板的计划任务中可能存在死循环脚本、间隔过密的备份任务或采集任务。

打开宝塔面板 -> 计划任务,逐个检查任务类型、执行周期和脚本内容,对于Shell脚本:

#!/bin/bash
whiletrue
do
php/www/wwwroot/xxx/artisanqueue:work
sleep1
done

这种写法如果没有正确退出机制,可能不断拉起进程。

执行以下命令查看系统计划任务:

crontab-l

检查是否有不明定时任务,再查看:

tail-f/var/log/cron

观察计划任务执行日志。

生产木码排查

CPU跑满最常见的外部原因是服务器被植入生产木码,木码通常会伪装成系统进程,如 kswapd0httpdnginxkernel 等。

检查可疑进程

ls-l/proc/PID/exe

如果原本应该属于系统的进程路径指向 /tmp/var/tmp/dev/shm,基本可判定为木码。

检查定时任务和启动项

crontab-l
cat/etc/rc.local
ls-l/etc/init.d/
systemctllist-unit-files--type=service|grepenabled

查看是否有陌生脚本或服务设置为开机启动。

检查临时目录

ls-la/tmp
ls-la/var/tmp
ls-la/dev/shm
find/-name"*.sh"-newer/etc/passwd-typef2>/dev/null

木码常用目录为 /tmp/var/tmp/dev/shm,找到可执行文件可先备份再删除。

清除和加固

  • 杀掉木码进程:kill -9 PID

  • 删除木码文件和相关脚本

  • 清除计划任务和启动项

  • 修改root密码、SSH端口

  • 更新宝塔面板和系统补丁

  • 安装宝塔系统加固插件

  • 检查SSH登录日志:last -f /var/log/wtmp | head -30

使用宝塔面板内置功能排查

宝塔面板提供了一些可以直接使用的工具。

监控

首页监控可以看到CPU、内存、磁盘IO、网络流量变化,确定跑满时间点。

进程守护管理器

软件商店安装“进程守护管理器”,可以查看和管理常驻进程,防止异常退出,也可以发现异常进程。

网络监控和防火墙

软件商店安装防火墙,在“网络监控”中查看实时连接,在“IP规则”中封禁异常来源。

网站日志分析

宝塔面板提供了网站日志查看和错误日志查看,可以在面板中直接搜索高频IP和URL。

文件管理搜索

使用文件管理中的搜索功能,搜索最近修改过的 .php.sh.pem 文件,排查后们文件。

预防CPU跑满的常规设置

  1. 及时更新宝塔面板、PHP、MySQL、Nginx等软件版本,修复安全漏洞。

  2. 修改SSH默认端口,禁用密码登录,使用密钥登录。

  3. 设置高强度面板密码、数据库密码,开启面板SSL。

  4. 安装宝塔防火墙、系统加固、防改动插件。

  5. 在PHP禁用危险函数:

disable_functions=exec,shell_exec,system,passthru,proc_open,popen,pcntl_exec,putenv
  1. 网站上传目录禁止执行PHP脚本。

  2. 定期备份网站和数据库。

  3. 配置Nginx/Apache请求频率限制和并发限制。

  4. 开启数据库慢查询日志并定期分析。

  5. 关闭不必要端口,仅保留80、443、SSH端口。

常用排查命令汇总

#查看CPU占用前十进程
psaux--sort=-%cpu|head-10
#查看内存占用前十进程
psaux--sort=-%mem|head-10
#查看PHP-FPM进程
ps-ef|grepphp-fpm
#查看MySQL进程列表
mysql-uroot-p-e"showfullprocesslist"
#查看实时连接
netstat-ntu|awk'{print$5}'|cut-d:-f1|sort|uniq-c|sort-nr|head-20
#查看计划任务
crontab-l
#查看进程可执行文件路径
ls-l/proc/PID/exe
#查看最近修改文件
find/www/wwwroot-typef-name"*.php"-mtime-1

1