2017-03-08 2 views
0

に上昇したときに私たちは、長475Kの一回、最長で複数の文字列で動作し、クラスベースのPHPスクリプトを持って失敗しました。この文字列は、30k要素の配列で展開されます。PHPプロセスはデフォルト128Mメモリと正常に動作しますが、メモリは150M

デフォルトのメモリ制限(PHP Cli)でスクリプトを実行するとプロセスは正常に動作しますが、メモリ制限を150Mに増やそうとすると、文字列を爆発させる行に "Allocated memory exhausted"エラーが表示されますアレイ。エラーごとに、スクリプトが失敗したときにexplode関数自体が別の158Mのメモリを割り当てようとします。

私たちは、ガベージコレクションが94Mにメモリ使用状況を引っ張っ120Mを周りにトリガー128Mを使用する場合に「上部」、下のメモリ使用状況を見てみました。メモリ制限を150Mに変更すると、ガベージコレクションはまったくトリガされないか、少なくとも「トップ」には表示されません。

PHPがこのように動作する理由は何か。私はデフォルトの制限で行くことができることを知っているが、これの背後にある理由を知ることは助けになるだろう。

システム:Mac OSのシエラ
PHP:7.0.14

+1

暗闇の中で刺す:それはあなたが、合計で持っているものを超えて「要求ごと」のメモリ割り当てを増加していることだろうか? – v010dya

答えて

0

あなたは256Mの代わりに、150Mを割り当ててみてもらえますか?

150Mは境界ブロック値ではありませんので、128M - > 256M - > 512M - >など

問題がまだ発生するのでしょうか?

+1

はい、150はブロック値ではありませんが、同じプロセスがブロック値ではなく180Mで正常に機能します。 –

+0

真実、非常に奇妙な...申し訳ありませんがあなたをさらに助けることができません –

関連する問題