BETA

Laravel DebugbarにPHPのmemory-limitを食いつぶされた話

投稿日:2018-10-22
最終更新:2018-10-24
※この記事は外部サイト(https://qiita.com/sisi_maExtend/items/181b...)からのクロス投稿です

Laravel5.5だよ。

リリース前のテスト中、Error: Allowed memory size of 134217728 bytesが出た。
適当に「Laravel メモリ」で調べてみると、Eloquentを脳死でget()してると結構起こるとのこと。
というわけでcursor()だなんだで処理を置き換えて、さあこれで大丈夫だろうと思ったらどうにも直らない。

しかしmemory_get_usageしてみても10485760としか出ず。

結論

タイトルの通りだこの野郎。 Laravel Debugbar(の、おそらくクエリログ機能)が全部持ってってた。 memory_get_usageで拾ってたのは処理本来のメモリ消費量だけだったってことだろうか。

.envにDEBUGBAR_ENABLED=falseオプションを書いてやると機能をまるっと停止できる。 手っ取り早く止めたいならこれでおk。

余談:↑に至るまでの経緯

「Laravel メモリ」で調べてた時に、デフォルトでメモリにクエリログ記録するから無効にしたほうがいいよーみたいな記事も見たのでとりあえず以下のコードを試してみた……のだが、効果がなかった。

\DB::connection()->disableQueryLog();

とりあえずIlluminate\Database\Connection.phpまで追っかけて、disableQueryLog()の処理を見てみる。

    public function disableQueryLog()
    {
        $this->loggingQueries = false;
    }

loggingQueriesにfalseをセットしてる。しかしそのloggingQueriesは追ってみたらデフォルトでfalse。つまり\DB::connection()->disableQueryLog();はやっぱり無意味。 バージョンアップで変わったのですかね?ともかく冤罪だった。

ふと思い出す。「Debugbarにクエリログ出てるやんけ!」
試しに止めたらさっくり動いたと。こんなんで丸一日潰したの結構悲しかった。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@sisimaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!