私は数ヶ月間、時々メモリ不足を継続的に開発されているアプリケーションで取得しています&についてこれまでの20人のユーザー。メモリ不足のPHPエラーの正確な原因(...それはvar_dump()でした)
私は検出できる否定的な反響はないように見えましたが、最終的には犯人を見つけました。
奇妙なコードが見つかったデフォルトの404エラービューがどのようにあるのかわかりませんが、どうしたのか分かりません。このデフォルト404エラービューは、findOrFail()を使用してdbがレコードを見つけられない場合、フレームワークによって自動的に呼び出されます。私のアプリでページが利用できないとき(あるべきコンテンツが公開/未公開になるため)、このエラービューがトリガされていました。
奇妙なコードがあった。
<!-- <div><?php var_dump($exception); ?></div> -->
<div class="text">{{$exception->getMessage()}}</div>
は全く奇妙な私は知っています。
最初に、htmlコメントはブレードファイルなので適用されないため、コメントアウトされていてもvar_dumpが呼び出されていました。
だから私はこれでそれを置き換える:
{{ var_dump($exception) }}
とメモリエラーのうち(およびブラウザで500エラー)が確実に再現することができます。
これを削除すると、404ビューがうまく表示されます。
{{ dd($exception) }}
と交換すると、トレースがレンダリングされます。
ので、はなぜのvar_dumpラインがメモリ不足エラーを引き起こすのでしょうか?
さらにこれを調べるにはどうすればよいですか?
私は$exception
変数の内容が大きいので、これが最も可能性が高いが起こるLaravel 5.3に
ありがとうございます。可能であれば、より深く調査することに興味がありますが、デバッグのスキルを向上させるには:爪をしたい!:)このような時代に私はリチャードファインマンを思い浮かべます。「問題が発生したら、ちょうど立ち去ることができません。 :) – mwal
関数[Exception :: getTraceAsString](http://php.net/manual/en/exception.gettraceasstring.php)もご覧になれます – OptimusCrime
私はそれを行いました。 dd()よりもはるかにコンパクトな形式です。次に、完全なスタックトレースを持つdd()が返すページの合計ファイルサイズを確認しました。回答:2MB。私は、メモリ不足エラーが発生する理由を知りたいのですが(私はPHPのデフォルトの128MBのメモリ制限にいます)。 2MBのスタックトレースを生成するには、PHPに128MB以上のメモリが必要ですか?それとも、別の何かが起こっていることを示唆していますか?私は気にする必要がありますか?調査するのは面白いですか?本当にありがとう。 – mwal