LoginSignup
mako0104
@mako0104

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Laravelのレスポンスがやたらと遅い

解決したいこと

Laravelのレスポンスがやたらと遅いのを解決したい。
早くても5秒ほどかかる。

発生している問題・エラー

環境

Windows 10
Docker Engine v20.10.16
PHP 8.0
Laravel 8

Dockerで以下のような構成で開発しています。

  • Laravel
  • Nuxt
  • MySQL
  • Nginx
docker-compose.yml

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の画面は使用せずです。)

api.php
Route::get('test', function () {
    return 'test';
});

image.png

NuxtのプロジェクトからLaravelにAPIのリクエストを投げると、preflightでも10秒ほどかかり、1ページの読み込みが20秒以上かかったりしてしまいます。

試したこと

  • コンテナ、ボリュームを削除してdocker compose up -d --buildでビルドし直す。
  • Laravelのプロジェクトを削除してから新しくプロジェクトを作成
  • Docker Desktopのアップデート

いずれもだめでした。

どうやって調べればよいか。。。

Dockerはアップデートしたり、ビルドし直したりして改善されなかったので、Dockerが原因ではないと考えています。
Laravelも新規にプロジェクトを作成して試して改善されなかったので、Laravelの設定関係でもないと考えています。
chromeから直接アクセスして遅かったので、Nuxtの設定関係が原因でもないと考えています。

次に何を疑えばよいか、どう調べて行けばよいか、途方にくれている状況です。

同じような現象を経験された方や知見のある方のご意見をお伺いしたく質問させていただきました。

どうぞよろしくお願いいたします。

2

3Answer

PHP以外のファイル受信は速いっぽいので、Laravelのどこかが遅いんですかね。通信かファイル操作のどこかでタイムアウトでも待っているんでしょうか。

自分なら

  • 各サーバーのログを見る
  • index.php からLaravelを起動する前に echo 'test'; exit; してみる
  • var_dump(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']); のようなコードを適当に埋め込んでみる

のように調べます。

2

Comments

  1. @mako0104

    Questioner
    ご回答ありがとうございます!

    教えていただいた方法で試してみます!!
    とくにnginxとかのサーバーのログは最低限確認したほうが良いですよね。。。

    $_SERVER['REQUEST_TIME_FLOAT']とかも知らなかったので、調べてみます!!

    今はちょっと他の作業をしている最中なので、終わり次第になってしまいますが、非常に参考になりました!!ありがとうございますm(__)m

Comments

  1. @mako0104

    Questioner
    @ishii_さん
    参考になりそうなサイトをご紹介いただき、ありがとうございます!
    他の作業をしていて、さらっとしか見れていないのですが、かなり参考になりそうです!!

    WSL2などはあまり意識していないというか、理解していないというか、そんな状況なので、そのあたりも踏まえて調べて行く必要もありそうです。

    本当にありがとうございます!!m(__)m

私も同じような悩みを抱えております。
もし続報がありましたら教えていただければ幸いです。

1

Comments

  1. @mako0104

    Questioner

    @shimotani1028
    メンテナンスしてなく、申し訳ないです。
    本件、記憶があいまいですが、現在Macに乗り換えています。

    ですが、他コメントでいただいた内容試しても改善しなかったかと思います。

    ・chromeが不調になった
    と言うことかもしれません。

    ・chromeの再起動や再インストール、セッションのクリア、キャッシュのクリアなどがひょっとしたら有効かもしれません。

    あと、今見返したら、イメージの削除はしていなかったっぽいですね。コンテナとボリュームの削除だけでした。

  2. @mako0104
    返信ありがとうございます。
    コメントいただいた方法を試してみます。

Your answer might help someone💌