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

私は何が欠けていますか?このメモリ制限はどこにありますか?

回答:


61

IIRC、無制限のmemory_limitはCLIでサポートされていません(これのソースを見つけようとします)が、今のところ、コマンドに渡してみてください:

php -d memory_limit=128M my_script.php

更新

どうやら、php cliで無制限のmemory_limitがサポートされないことを夢見ていたようです。とにかく、iniの値は無視されるようです。最も簡単な解決策は、スクリプトを呼び出すphpコマンドで具体的に設定することです。

更新2

メモリ制限がどこから来ているのかという質問に答えるために、おそらく「ini_set」を使用してスクリプト自体に設定されています。


そのconfはdebianのデフォルト設定であり、私にとって特別なものではありません。奇妙なことに、上記のコメントは、メモリ制限を128 MBにしていると言っています。
ライアンH

Hrm、値がどこから来ているのかという質問(実際の質問はどうやら読解の理解に失敗します)コードにini_set memory_limitがありますか?
-DTest

php --iniを実行して、読み取り中の構成ファイルのリストを出力します。FreeBSD構成では、メインの/usr/local/etc/php.iniを読んだ後、/ usr / local / etc / php / *。iniでファイルを検索します
Allan Jude

スクリプトは内部的にメモリをこの値に設定しているようです。他のすべてを排除するのを手伝ってくれてありがとう。そんなことはしたくありませんでした!-dヒントをありがとう。
ライアン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を使用するのが最適です。
アランジュード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.