web-dev-qa-db-ja.com

PHPスクリプトの応答がランダムに遅くなる-データベースのロックアップ?

これをここに投稿するのか、stackoverflowに投稿するのかわからなかったので、間違った場所にある場合はお詫びします。

私はcentOSVPSで約7つのphpスクリプトを実行しています。これらの各スクリプトはゲームサーバーに接続してログを処理し、ログを使用してデータベースクエリを実行するか、ゲームサーバーに情報を送り返します。

一部のスクリプトの応答がランダムに遅くなり、デバッグをどこから始めればよいかわからないという問題があります。各スクリプトは、独自のデータベーススキーマに接続しますが、同じMySQLサーバー上にあります。各スクリプトは、1秒あたり約4回の挿入と、それぞれのデータベースで2倍のselectステートメントを実行します。データベースのロックアップが問題の原因になると思いましたが、スクリプトが他のコマンドに応答するのが遅い場合でも、データベースから読み取られた一部のコンソールメッセージは、30秒ごとに問題なくゲームサーバーコンソールに送信されます。

どのスクリプトも大量のメモリまたはCPUパワーを使用していません。それぞれ約0.1%。

私はこの情報が本当に曖昧であることを知っていますが、Linuxについてはまったくよく知りません(実際、上限は私の限界についてです)。そして、これをデバッグし始める場所が本当にわかりません。

ありがとう。

2
webnoob

あなたが試すことができるいくつかのこと:

  • 関連するメッセージがないか、システムログとアプリケーションログを確認してください。時々、そこに記録される問題/タイムアウトがあります。これには、DerfKが言及したMySQLの低速クエリログが含まれます。
  • サーバー上のある種の監視システムがあればいいのですが。これにより、明らかなボトルネック(CPU、メモリ、IOなど)があるかどうかが確実にわかります。または、特定の時間に問題が発生した場合は、さまざまなコマンドラインツールtop、vmstat、iostatなどを使用してシステムステータスを確認できます。最初に明らかな/一般的な原因(CPUの高さ、RAMの低さ、スワップの使用量、IOロック/問題/高負荷))を必ず排除してください。
  • スクリプトのベンチマーク/ストレステストができる場合は、問題の原因を特定するのに役立つ可能性があります。問題を確実に複製できることは、問題を解決するための大きなステップです。
  • スクリプトにいくつかの基本的なログを追加することを検討してください。スクリプトの実行時間の基本的なチェックを行うことから始め、実行にX秒以上かかった場合にのみ何かを出力します。
  • スクリプトがログを解析するとおっしゃいました。可能であれば、同じログセットに対してスクリプトを複数回実行して、問題が同じ場所で発生するのか、異なる場所でランダムに発生するのかを確認してください。書き込みを無効にして、問題の原因が読み取り/解析または書き込み(あるいはその両方)であるかどうかを確認することもできます。
  • 実行速度が遅い特定のクエリを見つけた場合は、コマンドラインクライアントを介してデータベースで手動で実行/テストしてみてください。これにより、クエリ自体が遅いのか、何らかの理由でPHP)からリモートで実行されているのかがわかります。
3
uesp