宝塔低配机卡死主因是PHP脚本内存与超时未限制:需同步修改/www/server/php/{版本}/etc/php-fpm.d/www.conf(FPM模式,含php_admin_value[memory_limit]和max_execution_time)和php.ini(CLI模式),并重启php-fpm服务,再通过info.php和命令行验证Local/ Master值一致。

PHP脚本没设内存和超时限制,是宝塔低配机卡死的常见直接原因——不是面板本身慢,而是某个 php 进程吃光内存后触发 OOM Killer,连带杀掉 mysqld 或 nginx,整机假死。
为什么 PHP 脚本会把内存撑爆
WordPress 插件、采集脚本、未加限制的 Composer 安装、甚至一段递归错误的 foreach 都可能让单个 PHP 进程突破 512MB。而宝塔默认的 php-fpm 配置里,pm.max_children 和 php_admin_value[memory_limit] 往往没调,或只改了面板里的「PHP 设置」却漏掉 www.conf 中的实际生效项。
- 宝塔面板中修改的「内存限制」仅影响新建站点的默认值,对已存在站点或 CLI 执行的脚本(如定时任务里的
php /www/wwwroot/x.php)完全无效 -
memory_limit = 128M在php.ini里写了,但php-fpm的www.conf可能用php_admin_value[memory_limit] = 512M覆盖,实际以后者为准 - CLI 模式下走的是另一套配置:运行
php -i | grep "Loaded Configuration File"查到的php.ini路径,和 FPM 模式不是同一个文件
必须改的两个配置文件位置
别只在宝塔面板点几下就以为完事。真实生效靠的是这两个文件:
-
/www/server/php/{版本号}/etc/php-fpm.d/www.conf—— 控制所有通过 Nginx 转发进来的 PHP 请求(网站访问) -
/www/server/php/{版本号}/etc/php.ini—— 控制 CLI 模式(如计划任务、SSH 手动执行)
在 www.conf 里找到 php_admin_value[memory_limit] 行,改成:php_admin_value[memory_limit] = 256M
再往下找 php_admin_value[max_execution_time],补上:php_admin_value[max_execution_time] = 60
立即学习“PHP免费学习笔记(深入)”;
在 php.ini 里搜 memory_limit 和 max_execution_time,确保它们分别是:memory_limit = 128Mmax_execution_time = 30
改完必须重启服务:sudo systemctl restart php-fpm-{版本号}(比如 php-fpm-74)
检查是否真生效了
光改配置不验证,等于没做。分两步确认:
- 网页端验证:建一个
info.php放到网站根目录,内容为<?php phpinfo(); ?>,浏览器打开看memory_limit和max_execution_time值是否是你设的数字,且「Local Value」和「Master Value」一致 - CLI 验证:SSH 里执行
php -r "echo ini_get('memory_limit').PHP_EOL;"和php -r "echo ini_get('max_execution_time').PHP_EOL;",输出应匹配php.ini里的值 - 关键陷阱:如果
Local Value是128M但Master Value是512M,说明www.conf还在覆盖,得回去再查
额外要关掉的三个危险项
有些 PHP 脚本会绕过 memory_limit,比如用 set_time_limit(0) 或 ini_set('memory_limit', '-1')。与其等它爆发,不如从源头掐断:
- 在
www.conf里加一行:php_admin_flag[allow_url_fopen] = off(防远程文件加载失控) - 同样在
www.conf加:php_admin_flag[display_errors] = off(避免错误堆栈反复写日志占满磁盘) - 在宝塔「计划任务」里,所有
php类型任务,命令前统一加上内存限制:/usr/bin/php -d memory_limit=128M /www/wwwroot/cron.php
最易被忽略的一点:改完 www.conf 后不重启 php-fpm,配置永远不加载;而重启后若看到 systemctl status php-fpm-xx 报 ERROR: unable to load lib,大概率是 www.conf 里某行多了空格或用了中文标点——这种错误不会报在面板里,只会静默失败。



















