12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-31

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

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?