に上昇したときに私たちは、長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
暗闇の中で刺す:それはあなたが、合計で持っているものを超えて「要求ごと」のメモリ割り当てを増加していることだろうか? – v010dya