私は多くのパフォーマンスとスケールアウト作業を行っており、私が発見したのは次のことです。
すべてのアプリケーションの負荷は固有です
RAMの追加、別のサーバーの取得、yの実行、xの試行などの一般的な応答は、多くの場合フラストレーションの教訓であり、複雑な設定に任せます。
正しいものを測定する
最大の課題の1つは、どのベンチマークが重要かを判断することです。多くの場合、これには一歩下がる必要があり、クライアントの立場に立つ必要があります。場合によっては、単純化されたサイトデザインが変更され、Web訪問者に大きなメリットをもたらすこともあります。これが、YSlowのようなツールが好きな理由です。サーバーレベルではなく、エンドユーザーのエクスペリエンスに重点を置いています。サイトに適したベンチマークを決定したら、チューニングを開始できます。ベンチマークは、合計ページ読み込み時間、合計ページサイズ、キャッシュの有効性、サイトの待ち時間などです。アプリケーションに適したものを選択する必要があります。
仕組み
適切なベンチマークを追跡している1つは、非常に低いレベルから始めます。sysstatを使用したい。sysstatから豊富な情報を取得し、システム全体がアプリケーションの全体的なパフォーマンスを制限している可能性があることを区別するのに役立ちます。一般に、パフォーマンスの問題は次のように煮詰めます。
- ネットワークスタック
- メモリスタック
- ディスクio
- アプリケーション層
- OSレイヤー
sysstatおよびその他のツールを使用して、ヘアを分割し始め、パフォーマンスを制限しているシステムを見つけることができます。
たとえば、アプリケーションの構成方法が原因で、負荷の高いサーバーが失敗することを確認しました。キャッシュの不足、静的コンテンツの有効期限ヘッダーの欠如、HTTP vs.ファイルインクルードの使用などがすべて、アプリケーションのパフォーマンス低下の原因でした。これらのアプリケーションの問題を修正するために、ハードウェアを変更する必要はありませんでした。他の場合では、大量のキャッシュにもかかわらず、ディスクがいっぱいになったのを見てきました。より高速なディスクに移動すると、問題が修正されました。
すすぎと繰り返し
多くの場合、アプリケーションのチューニング中に、1つのボトルネックを解除して、別のボトルネックのみを見つけます。これが、チューニングしているものを監視することをお勧めする理由です。
たとえば、ディスクIOの問題を修正したが、アプリがまだ遅いとしましょう。あなたは自分の努力を無駄にしたと思うかもしれませんが、何が起こっているかというと、単純に別のボトルネックにぶつかっただけです。ディスクIOを注意深く監視することにより、重要なアプリケーションパフォーマンスモニターが変化していなくても、ディスクIOを確実に向上させることができます。
適切なツールを入手する
ジョブに適したツールを使用していることを確認してください。監視、テスト、ベンチマーク、プロファイリング、およびその他の最適化手法には、さまざまなツールがあります。状況に最適なツールを見つけてください。
経験則
すべてのアプリはユニークですが、いくつかの標準的な出発点を見つけます。
- メモリデータベースはメモリを愛する
- RAID 10以外のディスクIOを使用すると、データベースのパフォーマンスが低下する可能性があります
- 間違った最適化-大きな値は大きなパフォーマンスに変換されません
- アプリケーション-サーバーの設計が悪いと非難する
次のステップ
ボトルネックが見つからない場合は、サーバーを追加してもあまり効果がない場合があります。ディスクIOを解決するには、別のサーバーまたはSANが必要になる場合があります。RAMのボトルネックがある場合、別のサーバーがRAMを追加するという点でのみ問題を解決します。既存のサーバーにRAMを追加するだけの場合と比べると、かなりコストがかかります。
クイックフィックス
過剰展開。アプリケーションスタックに問題があると思われる場合は、これを行わなければなりませんでした。基本的に、CPU、RAM、ディスクIO(RAID 10、15K SCSIまたはSSD)にロードします。ハードウェアを大きくして、チューニングを開始します。これにより、問題を解決するまで浮かぶことができます。