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

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にクエリログ出てるやんけ!」
試しに止めたらさっくり動いたと。こんなんで丸一日潰したの結構悲しかった。