宝塔面板原生无法监控特定PHP脚本的CPU占用,因其仅识别进程名(如php-fpm)而非命令行参数;需用pidstat -C "script.php"持续采样或pgrep+top -p组合追踪,Supervisor仅守护进程存活,不提供资源消耗监控。

宝塔面板本身不提供细粒度的“特定进程”资源监控能力,所谓“监控某个 PHP 脚本 CPU 占了多少”,面板原生做不到——它只管到进程名(如 php-fpm)或用户(如 www),不解析命令行参数、不追踪子进程生命周期。
为什么装“系统任务管理器”插件没用?
这个插件名字有误导性。它本质是封装了 ps aux 和 top -b -n1 的前端展示,**不增加任何新采集能力**,也不支持按脚本路径、PID 或启动参数做持久化过滤。你刷新一次,它就查一次当前快照;关掉页面,历史数据全丢。对定位死循环、长时阻塞类问题几乎无帮助。
- 它显示的“CPU%”是采样瞬间值,波动大,无法反映趋势
- 无法区分同一
php-fpm进程池里哪个请求在跑/api/v2/sync.php,哪个在跑/cron/backup.php - 不记录日志,不能回溯“14:03:22 那个 98% 的 PHP 进程到底执行了什么”
真正能盯住单个 PHP 进程的两种实操路径
要监控特定脚本(比如 /www/wwwroot/app.com/worker.php),必须绕过面板图形界面,直接操作 Linux 底层机制:
-
方案一:用
pidstat按命令名持续采样(推荐)
执行:pidstat -C "worker.php" -u -r -d 5
每 5 秒输出该脚本所有实例的 CPU、内存、IO 使用,支持写入文件长期跟踪 -
方案二:结合
pgrep+top -p
先查 PID:pgrep -f "/www/wwwroot/app.com/worker.php"
再盯住它:top -p $(pgrep -f "/www/wwwroot/app.com/worker.php")
注意:如果脚本频繁启停,top -p会报 “no process found”,需配合watch循环重试
Supervisor 是唯一靠谱的“进程级守护+基础监控”组合
如果你的目标是“让某个 PHP 脚本常驻,并知道它有没有挂、重启过几次”,Supervisor 是宝塔生态里最接近需求的方案。但它只管“存活”,不管“资源消耗”:
- 它能记录每次崩溃时间、退出码、stdout/stderr 日志(路径在配置里的
stdout_logfile) - 它不能告诉你某次运行占了 300MB 内存还是 800MB——得靠外部工具配合,比如在启动命令前加
/usr/bin/time -v或用cgroups限流限内存 - 别把 Supervisor 配置里的
autostart=true和“实时资源监控”混淆,这是两件事
真正的难点不在“怎么装插件”,而在于:Linux 进程没有全局唯一 ID,PHP 脚本启动后可能 fork 出子进程、调用 exec、甚至自己 daemonize。想稳定追踪,必须从启动方式、用户权限、cgroup 分组、日志打点四个层面一起约束——这些,面板插件一个都做不到。


















