サーバーのボトルネックを特定するには、どのような種類のテストを実行する必要がありますか?大きな負荷スパイクが発生したときにそれを維持できるように、最適化しようとしています。私はLAMP環境でUbuntuを実行しています。
最初にmuninなどのログフレームワークをインストールすることをお勧めします。これにより、ベースロードとサーバーのスパイク時にデータを利用できるようになります。次に、SQLサーバー上のクエリ(特に遅いクエリ)を監視します。
この情報を使用して、これらの状況がどれほど異常であるか、または単に最後の釘を高負荷のマシンに追加するだけであるかどうか、RAMが不足している、特定のプロセスが時々ディスクをハンマーで叩いているなど、何が起こるかをすでに判断できます。あなたのCPUが問題です。
これは非常に幅広い質問です。何かを測定するには、最初にベースラインパフォーマンス指標が必要です。 munin
とmunin-node
をインストールし、ベースラインを評価します。 collectd
と由緒あるSNMPもオプションですが、あまりユーザーフレンドリーではありません。
アプリケーションについて考えてください。データベースが多いですか?たくさんのIO? CPU(ビデオエンコーディング)?まず、いくつかの通常のWebアプリケーションタスクを実行し、ボトルネックがどこにあるかを確認します。 siege
、ab
、JMeter
などの他のツールを使用して、これらのタスクを自動化します。
いくつかのベースラインメトリックとブレークポイントを確立した後、どこを改善すべきかを確認できます。述べたように、これは幅広い質問であるため、かなり広い範囲の答えがあります。
I/Oバウンド:データベースに不必要にアクセスしていますか?クエリキャッシュはどのように見えますか?書き込みまたは読み取りを最適化する必要がありますか?別のDBサーバーが必要ですか?
メモリバウンド:データベースI/Oバウンドではなく、メモリ内にできるだけ多くのメモリがあると仮定すると、データセットは使用可能なメモリに対して大きすぎますか?キャッシュヒット率とは何ですか? memcached
のような別のキャッシュフレームワークを使用していますか?
CPUバウンド:アプリケーションは複数のコア/ワーカーを利用できますか?スレッドロックや競合の問題に悩まされていますか? Apacheの代わりにnginx
のような軽量のウェブサーバーを使用するか、リバースプロキシ設定を使用することを検討してください。変更可能な関連するsysctl.conf
(カーネル)パラメーターもある場合があります。
ネットワークバウンド:ゲームのこの段階ではほとんどありません。
その他のポイントと考慮事項:
DBのいくつかの迅速な最適化は、 mysqltuner.pl で実行できます。
実際のトラフィックを可能な限り厳密にシミュレートしてみてください(アクセスログの再生は良いスタートです)。
本番DB設定でディスクのスワップ領域に到達したことがある場合は、世界が傷つきます。
tl; dr関連すると思われるものをすべてグラフ化し、サーバーを強く叩き、調整し、繰り返します。
私が最もよく見つけたのは、展開前に容量分析を実行することです。しかし、あなたが探しているものについての本当に素晴らしい記事があります、私はこれが役立つことを願っています。
http://blog.inarow.net/post/227533559/four-steps-to-diagnose-your-lamp-application
1)1秒以上かかるMySQLクエリの追跡2)モニターPHPメモリ使用量とApache配信時間のログ3)ログPHPエラー4)OSでスナップショットを取得レベル
これにもJMeterを追加したいと思います。 http://jakarta.Apache.org/jmeter/