【发布时间】:2013-03-28 19:17:40
【问题描述】:
我正在一个托管虚拟服务器上运行 Symfony2.1,该服务器运行 CentOS 和 cPanel。一切运行良好,只是我不能再使用 Symfony CLI 命令。我得到了这个:
Fatal error: Out of memory (allocated 20185088) (tried to allocate 71 bytes)
错误(例如,当我尝试运行 php app/console cache:clear --env=prod 或其他有用的 Symfony 命令时)。
几个月前我通过 CLI 使用相同的命令没有任何问题,直到几天前出现此错误。从那以后我一直无法克服这个错误。
我想指出,这不是与 PHP memory_limit 相关的错误(见下文),是“内存不足”错误而不是“已分配内存大小”错误。
完全相同的命令在添加到 cron 作业时运行完美(这是我现在使用的临时解决方法),这意味着脚本本身不应该受到指责。
到目前为止我尝试过的事情:
-
增加 php.ini 中的 memory_limit(或直接在命令行上):我怀疑我遇到的错误类型,这没有效果
搜索可能覆盖 CLI 的此设置的任何其他 php.ini 文件:没有
使用 free -m 监控内存使用情况:有大量可用内存(这是意料之中的,因为 symfony 命令可以完美地通过 cron 作业运行)
试图找出 WHM/cPanel 是否有,例如通过更新为用户帐户设置任何内存限制:我发现这个可能是使用被监禁的 SSH shell 时的情况(但事实是,我不是,我使用的是普通的 SSH shell),或者如果启用 Shell Fork Bomb 保护(但不,这在我的服务器上被禁用)
使用 ulimit -a 检查我的服务器/帐户上的 ulimit 设置:有限制,但它们达到 256M,而我的“内存不足”错误表明似乎不超过 20M允许PHP CLI
检查 .conf 文件中某处是否存在内存限制,尤其是 /etc/security/limits.conf:没有
检查任何其他可以设置这种内存限制的文件:这次我确实找到了一个,即 /usr/local/cpanel/etc/login_profile/limits.sh这似乎设置了这样的限制(ulimit -n 100 -u 35 -m 20000 -d 20000 -s 8192 -c 20000 -v unlimited 2>/dev/null)=> 我想我终于找到了罪魁祸首,因为数字 (20000) 似乎对应,但以 root 身份编辑此文件并通过 SSH 再次登录我的帐户,同样没有效果
我的问题:
我现在已经没有选择的余地了。我联系了我的主人,但他们和我一样一无所知(实际上,他们甚至不知道 Symfony)。有没有人遇到过同样的问题?
如果有任何机会,/usr/local/cpanel/etc/login_profile/limits.sh 让我接近答案,我错过了什么?我是否需要重新启动服务器或重新启动 cPanel,而不仅仅是重新登录我的帐户?
顺便说一句,这是否可能与 WHM/cPanel 更新有关(如前所述,直到几天前,一切都在命令行上正常运行)?
感谢您的帮助,很抱歉这个问题太长了。
PS:我在 Stack Overflow 上发现了其他类似的问题,但每个问题都是使用我已经尝试过的方法之一解决的。所以我想我遇到了不同的问题。
【问题讨论】:
-
确实听起来脚本使用的 PHP 超出了
memory_limit允许的范围。您是否尝试过使用php --ini来获取 CLI php.ini 的位置,设置memory_limit = 512M(或其他一些较大的数字)然后重新启动 apache? -
+1 解释清楚的问题
-
@ChrisMcKinnel 谢谢你的回答。是的,我做到了(确保它确实是我正在编辑的 CLI php.ini),但它没有改变任何东西。这就是我严重怀疑这是 PHP 内存限制问题的原因。
-
你的服务器有多少内存?你有交换分区吗?在我的 vps 中使用 composer update 之前我遇到了一些类似的问题并添加了一个交换分区解决了这个问题,
-
您是否正在运行 ulimit -a 作为您尝试运行脚本的同一用户?
标签: php symfony centos command-line-interface cpanel