
私の運用サーバーは、Windows Server 2012 R2、Apache 2.4、PHP 5.6、および MariaDB (バージョンは不明、おそらく無関係) です。Silverstripe 3.5 で実行されているカスタマイズされたサイトがあります。
最近、特定のアクションでとんでもない TTFB が発生しています。特にログイン (30 秒以上) や、バックエンドの閲覧中にランダムに発生することがあります。不思議なことに、これは同様に構成されている開発サーバーでは発生しません。IT 部門が徹底的に調査しhttpd.conf
、php.ini
問題になる可能性のある違いがあるかどうかを確認する予定です。
役立つことを期待して Zend OpCache 拡張機能を有効にしましたが、大きな改善は見られません。
XDebug をインストールし、ログイン中にプロファイリングをトリガーしました (DOM インスペクター経由で XDEBUG_PROFILE という隠しフォーム フィールドを追加することにより)。しかし、WinCachegrind で表示すると、PHP の実行にかかった時間は累計で 5 秒未満、つまり累計時間はmain.php
4.x 秒でした。フレームワーク ロジックやデータベース アクセスに顕著なボトルネックはないようです。
httpd.exe
リクエストの実行中、CPU の 14% を占有します。Powershell でログを見ると、応答が送信されるまでgci -Wait
リクエストはログに記録されずaccess.log
(通常の動作かどうかは不明)、エラーは表示されていないことがわかります。
PHP がロジックの実行に 4 秒しかかからないと主張しているリクエストを、Apache が処理するのになぜこんなに時間がかかるのか、私にはわかりません。潜在的な解決策があればありがたいのですが、ファイル アクセス、実行のトレースなど、Apache がこのように遅くなる原因を突き止めるために、診断の観点で他にどこを調べればよいのかを知りたいです。どこから調べ始めればよいのか、まったくわかりません。
答え1
データベースはないボトルネックでした。皮肉なことに、それはキャッシュ- それはZend_Cache_Backend_File
サイトにキャッシュするデータ、テンプレート、画像が大量にある場合、ベースのキャッシュがひどく遅くなるという既知の問題確かに、サーバー上の silverstripe-cache フォルダーには 5,000 を超えるファイルがありました。
キャッシュを無効にするために次の行を追加すると./mysite/_config.php
、即座に大幅な改善が見られました (ログイン時の 35 秒の TTFB が 0.5 秒未満に短縮されました)。
SS_Cache::set_cache_lifetime('default', -1, 100);
しかし、これは一時的な修正です。ファイルシステムのバックエンドと組み合わせて RAM ディスクを使用する、XCache や Memcached などのメモリ プールを使用するバックエンドを活用するなど、キャッシュを処理するためのより永続的でより実践的なソリューションの実装を検討するとともに、 をZend_Cache
優先してダンプする Silverstripe 4.x への移行に向けて取り組んでいきますsymfony/cache
。
しかし、私のオフィスでは官僚主義があらゆることに干渉するのを好んでいるので、それが起こるまでにはもう少し時間がかかるかもしれません。