PHP以外のファイル受信は速いっぽいので、Laravelのどこかが遅いんですかね。通信かファイル操作のどこかでタイムアウトでも待っているんでしょうか。
自分なら
- 各サーバーのログを見る
-
index.php
からLaravelを起動する前にecho 'test'; exit;
してみる -
var_dump(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']);
のようなコードを適当に埋め込んでみる
のように調べます。
Laravelのレスポンスがやたらと遅いのを解決したい。
早くても5秒ほどかかる。
Windows 10
Docker Engine v20.10.16
PHP 8.0
Laravel 8
Dockerで以下のような構成で開発しています。
version: "3"
services:
web:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
args:
- TZ=${TZ}
volumes:
- ./docker/nginx/logs:/etc/nginx/logs
- ./docker/nginx/conf.d:/etc/nginx/conf.d
- ${PROJECT_PATH}:/var/www/laravel
ports:
- ${WEB_PORT}:80
links:
- app
depends_on:
- app
app:
build:
context: .
dockerfile: ./docker/php/Dockerfile
args:
- TZ=${TZ}
volumes:
- ${PROJECT_PATH}:/var/www/laravel
links:
- db_master
environment:
- DB_CONNECTION=${DB_CONNECTION}
- DB_HOST=db_master
- DB_DATABASE=${DB_NAME}
- DB_USERNAME=${DB_USER}
- DB_PASSWORD=${DB_PASS}
- TZ=${TZ}
- MAIL_HOST=${MAIL_HOST}
- MAIL_PORT=${MAIL_PORT}
db_master:
image: mysql:5.7
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
- TZ=${TZ}
ports:
- ${DB_PORT}:3306
front_app:
build:
context: .
dockerfile: ./docker/node/Dockerfile
args:
- TZ=${TZ}
volumes:
- ./nuxt:/var/www/nuxt
- node_modules_volume:/var/www/nuxt/node_modules
ports:
- ${FRONT_PORT}:3001
links:
- web
depends_on:
- web
volumes:
node_modules_volume:
api.phpに以下のように、文字列を返すだけのルーティングを追加してレスポンスの時間を隠してみましたところ、画像のように6秒以上かかりました。(chromeから直接アクセス。Nuxtの画面は使用せずです。)
Route::get('test', function () {
return 'test';
});
NuxtのプロジェクトからLaravelにAPIのリクエストを投げると、preflightでも10秒ほどかかり、1ページの読み込みが20秒以上かかったりしてしまいます。
docker compose up -d --build
でビルドし直す。いずれもだめでした。
Dockerはアップデートしたり、ビルドし直したりして改善されなかったので、Dockerが原因ではないと考えています。
Laravelも新規にプロジェクトを作成して試して改善されなかったので、Laravelの設定関係でもないと考えています。
chromeから直接アクセスして遅かったので、Nuxtの設定関係が原因でもないと考えています。
次に何を疑えばよいか、どう調べて行けばよいか、途方にくれている状況です。
同じような現象を経験された方や知見のある方のご意見をお伺いしたく質問させていただきました。
どうぞよろしくお願いいたします。
PHP以外のファイル受信は速いっぽいので、Laravelのどこかが遅いんですかね。通信かファイル操作のどこかでタイムアウトでも待っているんでしょうか。
自分なら
index.php
からLaravelを起動する前に echo 'test'; exit;
してみるvar_dump(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']);
のようなコードを適当に埋め込んでみるのように調べます。
@mako0104
Questionerこちらの記事が参考になれば幸いです。
検討違いだったらすみません。
「WSL2 + Docker」が遅いなら、速くすればいい
DockerでLaravel動かす時に処理が重い問題の対処法
【Docker】Laravelのレスポンス改善
@mako0104
Questioner私も同じような悩みを抱えております。
もし続報がありましたら教えていただければ幸いです。
@mako0104
Questioner@shimotani1028
メンテナンスしてなく、申し訳ないです。
本件、記憶があいまいですが、現在Macに乗り換えています。
ですが、他コメントでいただいた内容試しても改善しなかったかと思います。
・chromeが不調になった
と言うことかもしれません。
・chromeの再起動や再インストール、セッションのクリア、キャッシュのクリアなどがひょっとしたら有効かもしれません。
あと、今見返したら、イメージの削除はしていなかったっぽいですね。コンテナとボリュームの削除だけでした。
@mako0104
返信ありがとうございます。
コメントいただいた方法を試してみます。