宝塔面板内存耗尽导致系统卡死怎么办_设置PHP脚本执行超时与内存限制
宝塔低配服务器卡死主因是PHP未设置内存与超时限制,引发OOMKiller。需同步修改www.conf和php.ini的memory_limit及max_execution_time,重启php-fpm,验证网页端Local与Master值一致,并关闭set_time_limit(0)等危险项。
很多用宝塔面板跑低配服务器的朋友,都遇到过系统突然卡死的情况——明明是轻量应用,CPU负载也不高,但就是鼠标都拖不动、SSH半天没反应。其实罪魁祸首十有八九不是面板本身,而是某个PHP进程把内存吃光了,触发OOM Killer,顺带把mysqld或nginx一起杀掉,整机直接假死。
宝塔低配机卡死主因是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.ini 里搜 memory_limit 和 max_execution_time,确保它们分别是:
memory_limit = 128M
max_execution_time = 30
改完必须重启服务:sudo systemctl restart php-fpm-{版本号}(比如 php-fpm-74)
检查是否真生效了
光改配置不验证,等于没做。分两步确认:
- 网页端验证:建一个
info.php放到网站根目录,内容为,浏览器打开看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 里某行多了空格或用了中文标点——这种错误不会报在面板里,只会静默失败。


































