PHP CLI内存限制


35

我在php cron作业中遇到内存错误:

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 71 bytes) in /opt/matrix/core/lib/DAL/DAL.inc on line 830

crontab的适用部分是:

$ sudo crontab -u www-data -l
MAILTO=root
# m h  dom mon dow   command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix

我正在Debian Squeeze上运行,已完全更新。

显而易见的解决方案是cli具有较低的内存限制(64MB)。但是,/ etc / php5 / cli / php.ini表示它是无限的。

$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1

我在某处读到它对于不同的用户可能会有所不同,并且由于该过程以www-data的形式运行,所以我运行了:

$ sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0

甚至apache / php.ini也有比错误所声称的更高的限制:

$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M

我想念什么?此内存限制在哪里?

Answers:


61

IIRC,CLI不支持无限制的memory_limit(我将尝试为此找到源),但现在,尝试将其传递给命令:

php -d memory_limit=128M my_script.php

更新

显然,我梦到php cli不支持无限的memory_limit。无论如何,似乎ini的值被忽略了。然后,最简单的解决方案应该是在调用脚本的php命令中对其进行专门设置​​。

更新2

为了回答内存限制来自何处的问题,很可能在脚本本身中使用“ ini_set”来设置它。


conf是debian的默认配置,对我来说没什么特别的。奇怪的是,它上面的注释说它使内存限制为128 MB。
瑞安H

嗯,值从何而来的问题(显然是实际的问题/阅读理解失败),您在代码中是否有任何ini_set memory_limit?
DTest

运行php --ini以打印正在读取的配置文件列表。在FreeBSD配置中,在阅读了主要的/usr/local/etc/php.ini文件之后,它将在/usr/local/etc/php/*.ini文件中查找文件
Allan Jude

似乎脚本正在内部将内存设置为此值。感谢您帮助我排除其他所有问题。我真的不想要那样!感谢-d提示。
Ryan H

1
该脚本在内部为应用程序设置了自己的内存限制。它设置为64 MB。感谢您帮助我找到它。
瑞安H

0

在测试CLI php版本时5.5.9,似乎在cli中默认情况下具有无限的内存限制,并且指定php -d memory_limit=4G my_script.php将对此设置一个限制。


这是不正确的,CLI将仅遵循php.ini文件中指定的memory_limit设置
Tim

-3

如果将PHP安装为Apache模块(在中选中“服务器API” phpinfo()),则应在cron作业中通过命令行Web浏览器(wget,curl,lynx等)调用它,如下所示:

*/15 * * * * lynx -dump http://localhost/script.php >> /var/log/script.log 2>&1

这只会浪费更多的Apache内存。SAPI和CLI均已安装,因此在这种情况下最好使用CLI。
艾伦·裘德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.