商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 宝塔面板内存耗尽导致系统卡死怎么办_设置PHP脚本执行超时与内存限制

宝塔面板内存耗尽导致系统卡死怎么办_设置PHP脚本执行超时与内存限制

  发布于2026-07-07 阅读(0)

扫一扫,手机访问

很多用宝塔面板跑低配服务器的朋友,都遇到过系统突然卡死的情况——明明是轻量应用,CPU负载也不高,但就是鼠标都拖不动、SSH半天没反应。其实罪魁祸首十有八九不是面板本身,而是某个PHP进程把内存吃光了,触发OOM Killer,顺带把mysqldnginx一起杀掉,整机直接假死。

宝塔低配机卡死主因是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脚本没设内存和超时限制,是宝塔低配机卡死的常见直接原因——不是面板本身慢,而是某个 php 进程吃光内存后触发 OOM Killer,连带杀掉 mysqldnginx,整机假死。

为什么 PHP 脚本会把内存撑爆

WordPress 插件、采集脚本、未加限制的 Composer 安装、甚至一段递归错误的 foreach 都可能让单个 PHP 进程突破 512MB。而宝塔默认的 php-fpm 配置里,pm.max_childrenphp_admin_value[memory_limit] 往往没调,或只改了面板里的「PHP 设置」却漏掉 www.conf 中的实际生效项。

  • 宝塔面板中修改的「内存限制」仅影响新建站点的默认值,对已存在站点或 CLI 执行的脚本(如定时任务里的 php /www/wwwroot/x.php)完全无效
  • memory_limit = 128Mphp.ini 里写了,但 php-fpmwww.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_limitmax_execution_time,确保它们分别是:
memory_limit = 128M
max_execution_time = 30

改完必须重启服务:sudo systemctl restart php-fpm-{版本号}(比如 php-fpm-74

检查是否真生效了

光改配置不验证,等于没做。分两步确认:

  • 网页端验证:建一个 info.php 放到网站根目录,内容为 ,浏览器打开看 memory_limitmax_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 Value128MMaster Value512M,说明 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-xxERROR: unable to load lib,大概率是 www.conf 里某行多了空格或用了中文标点——这种错误不会报在面板里,只会静默失败。

本文转载于:https://www.php.cn/faq/2426588.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注