Moodle サイトにログインするときに CPU スパイクとタイムアウトをデバッグするには、どこから始めればよいでしょうか?

Moodle サイトにログインするときに CPU スパイクとタイムアウトをデバッグするには、どこから始めればよいでしょうか?

初心者っぽい質問で申し訳ありません。私はウェブ開発者ですが、サーバーの保守やパフォーマンスの問題のデバッグと修正の経験はあまりありません。

MySQL データベースを使用する Apache サーバー (LAMP スタック) 上で実行されている Moodle サイト (Moodle 2.2.3) があります。

最近、特定のユーザーがログインしようとすると、タイムアウトが報告されています。一定時間が経過すると、空白のページが表示されるだけです。一部のユーザーは問題なくログインできます。これは、ユーザーが登録しているコースによって決まるようです。たとえば、コースのない管理者ユーザーは問題なくログインできます。

php.ini のタイムアウト値を 60 秒から 120 秒に延長したところ、同じ動作を確認できました。$top を使用すると、タイムアウトが発生するまで www-data が使用する CPU が 99% 前後に急上昇することがわかります。

データベースへの長い呼び出しなどが行われているものと想定しています。

mysql によって記録されたエラー メッセージはどうすれば確認できますか? PHP によって記録されたエラー メッセージはどうすれば確認できますか? php.ini で定義されているデフォルトの error_log (/var/log/php.log) が存在しないようです。何が起こっているか確認できるように、PHP でこのファイルにエラーを記録するにはどうすればよいですか?

Moodle は logs/error.log にもエラーを記録しますが、これでは何も明らかになりません。

あらゆる良い提案を歓迎します。ありがとうございます!

答え1

私が以前働いていた場所では、Moodle のパフォーマンス最適化を数多く行っており、その多くは PHP Xdebug プロファイリングによって実現しました。プロファイリングを有効にすると、*.cachegrind ファイルが生成され、多くのユーザーが読み取ることができます。私は Windows では QCacheGrind、Linux では KCacheGrind を使用しています。これで、時間がかかっている関数を正確に特定できるようになります。

記憶から推測すると、これはおそらく、ユーザーがログインしたときにロードしようとしているコース データの量です。データが多すぎて、必要なものだけでなく SQL サーバーからすべてのデータを取得している場合、処理速度がかなり低下する可能性があります。これは、上記のコメントで述べたように、パフォーマンスの問題の原因となっているのが SQL クエリである場合、スロー ログを使用して特定することもできます。

Moodle 2.2.3 以降、アップストリーム リポジトリに多くのパフォーマンス修正がプッシュされたことは承知していますので、Moodle インスタンスをより新しいものにアップグレードすることを強くお勧めします。私たちは公式 Moodle パートナーとして、これらの修正を Moodle にプッシュしていました。

関連情報