LoginSignup
8
13

More than 5 years have passed since last update.

Mac + Docker + Laravel の開発環境下で、異常に遅い時は Laravel Debugbar が原因な説

Last updated at Posted at 2018-03-28

標題の開発環境下で、異常に遅かったので調べてみた。

結論としては、 Laravel Debugbar を無効にすると 3倍近く 速くなった。

image.png

レスポンスタイムが 2.6秒 → 0.85秒 なので3倍くらい。

考えられる要因

Laravel Debugbar は、 storage/debugbar/ 以下に Xc590ef0f5b368cf34373093291b95147.json のようなファイルを リクエストの度に 出力するようだ。

~> find storage/debugbar -type f | wc -l
      58

中身を確認すると、スタックトレースなどが入っている。

/api などはミドルウェアなどが多いので、そのファイルのサイズが異常に大きくなる。整形すると 24000行 ものファイルを作っている。

~> cat storage/debugbar/X2e75040e69de9cae006253a48fd5276c.json | jq . | wc -l
   24676

今回出力されたファイルサイズは 500KB だった。

~> ls -lh storage/debugbar/X2e75040e69de9cae006253a48fd5276c.json
-rw-r--r--  1 kazuya-mac  staff   508K  3 27 18:32 storage/debugbar/X2e75040e69de9cae006253a48fd5276c.json

で、Mac上でDocker動かすと、ファイル書き込み処理が重くなるのは有名な話。

よって、このログ出力をやめるだけでもかなりの速度改善になる。

TODO

Laravel Debugbar 自体は使いたいので、パフォーマンス改善される方法を探す。
下記のいずれか、かなと。

  • HTTP経由でどこかに飛ばす
  • ログの出力先を共有ボリューム以外の場所にする
  • storage/ 以下を volume でマウントしない(Dockerで部分的にマウントしないことができるのか・・?)

Debugbar 以外でも、ログ出力先を共有ボリューム以外にすれば、高速化できるかもしれない。

余録

これ便利。

speedtest
#!/usr/bin/env fish

while true
    curl -H 'Accept-Encoding: gzip' -Ss -LI -o /dev/null -w \
        '%{http_code} in %{time_total} seconds, %{content_type} as %{size_download} \n' \
        $argv
    sleep 1
end
8
13
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
8
13