主要メーカー向けのパフォーマンス テスト監視指標と分析およびチューニング ガイド

1. システムのボトルネックとなる要因は何か

  • CPU:大量の計算がある場合、中断することなく長時間 CPU リソースを占有するため、他のリソースが CPU を競合できず、応答が遅くなり、頻繁な FullGC などのシステム パフォーマンスの問題が発生します。マルチスレッドによる頻繁なコンテキスト 切り替えにより CPU がビジー状態になるため、一般的には CPU 使用率が 75% 未満であることがより適切です。
  • メモリ: Java メモリは通常、jvm メモリを通じて割り当てられ、主に jvm のヒープ メモリを使用して Java によって作成されたオブジェクトを格納します。メモリの読み書き速度は非常に速いですが、メモリ空間には限りがあり、メモリ空間がいっぱいになってオブジェクトを再利用できなくなると、メモリオーバーフローやメモリリークが発生します。
  • ディスク I/O:ディスクの記憶領域はメモリの記憶領域よりもはるかに大きいですが、ディスクの読み取りおよび書き込み速度はメモリの速度よりも遅いため、SSD ソリッド ステート ドライブが導入されましたが、まだ実現できません。メモリの速度と比較してください。
  • ネットワーク:帯域幅のサイズは送信データに大きな影響を及ぼし、同時実行量が増加すると、ネットワークがボトルネックになりやすくなります。
  • 例外: Java プログラムは例外をスローし、例外をキャッチする必要があります。このプロセスはパフォーマンスを消費します。高い同時実行条件で例外が継続的に処理されると、システムのパフォーマンスに影響します。
  • データベース:データベース操作には通常、ディスク I/O の読み取りと書き込みが含まれます。データベースの読み取りと書き込みが大量に行われると、ディスク I/O パフォーマンスのボトルネックが発生し、データベース操作に遅延が発生します。

並行プログラミングを行う場合、同じリソースを操作するために複数のスレッドが使用されることがよくあります。このとき、データのアトミック性を確保するために、ロックを使用する必要があります。ロックの使用によりコンテキストの切り替えが発生し、パフォーマンスのオーバーヘッドが発生します。 JDK1.6以降は、バイアスロック、スピンロック、軽量ロック、ロック粗化、ロック削除が追加されます。

2. システムのパフォーマンスを測定するためにどの指標が使用されるか

1.RT応答時間

  • データベース応答時間 (データベース操作にかかる時間)
  • サーバーの応答時間には、Nginxが配信するリクエストにかかる時間と、サーバープログラムの実行にかかる時間が含まれます。
  • ネットワーク応答時間、ネットワーク送信、送信されたリクエストを分析するためにネットワーク ハードウェアが消費した時間
  • Web クライアントとアプリ クライアントの場合、クライアントの応答時間は通常無視できますが、クライアントのロジック処理が多い場合、消費時間が長くなる可能性があります。

2.TPSスループット

  • ディスク スループット: IOPS (Input/Output Per Second) 1 秒あたりの入出力。これはシステムが単位時間あたりに処理できる I/O リクエストの数です。I/O リクエストは通常​​、読み取りまたは書き込みデータ操作リクエストです。注意してください。ランダムな読み取りおよび書き込みのパフォーマンス。小規模なファイル ストレージやメール サーバーなど、ランダムな読み取りおよび書き込みが頻繁に行われるアプリケーションに適しています。データスループットとは、単位時間当たりに送信できるデータ量のことで、動画編集など連続した読み書きが多いアプリケーションでは、大量の連続データが送信されます。
  • ネットワーク スループット:ネットワーク送信中にフレーム損失なしでデバイスが受け入れることができる最大データ レートを指します。ネットワーク スループットは帯域幅だけでなく、CPU 処理能力、ネットワーク カード、ファイアウォール、および I/O とも密接に関係しており、スループットはネットワーク カードの処理能力、内部プログラム アルゴリズム、および帯域幅によって決まります。

3. リソースの利用

  • CPU 使用率では、まず物理 CPU の数、単一 CPU のコア数などの CPU の基本情報を把握し、次にコマンド vmstat、mpstat、top を使用して使用率を確認できます。
  • メモリ使用量、free -m、vmstat、top
  • ディスク I/O、iostat、iotop
  • ネットワーク I/O、netstat、ifconfig、tcpstat

3. 性能試験で注目すべき問題点

パフォーマンス テストを行っていると、システムの動作がどんどん速くなり、その後のアクセス速度は最初のアクセス速度の数倍になります。これは、Java 言語のコンパイル順序が、最初に .java ファイルが .class にコンパイルされるためです。ファイルを作成し、実行前にインタプリタを介して .class のバイトコードをローカル マシン コードに変換します。

メモリと実行効率を節約するために、コードが最初に実行されるとき、インタプリタは最初にこのコードを解釈して実行します。コードの実行数が増加すると、仮想マシンは特定のメソッドまたはコードが特に頻繁に実行されることを認識し、それがホット スポット コード (ホット スポット コード) として識別されます。

ホット コードの実行効率を向上させるために、仮想マシンは実行時にジャストインタイム コンパイラ (JIT) を通じてこれらのコードをローカル プラットフォーム関連のマシン コードにコンパイルし、メモリに格納します。これにより、初めてシステムの実行が遅くなりますが、その後のアクセスの速度は数倍速くなります。

パフォーマンステストを行う場合、各テストで処理されるデータセットは同じでも、マシン上の他のプロセスの影響、ネットワークの変動、各テストの影響など、テストには多くの不安定な要素が伴うため、結果は異なります。 JVM ガベージ コレクションのさまざまなフェーズ。複数のテストに合格し、テスト結果を平均することもできますが、平均値が妥当な範囲内にあり、変動が大きすぎない限り、この場合、パフォーマンス テストは合格します。

4. パフォーマンスの問題を特定する場合、ボトムアップ戦略分析とトラブルシューティングを使用できます。

圧力テストを実施した後、RT、TPS、TP99、負荷のかかるサーバーの CPU、メモリ、I/O、JVM の GC 周波数を含むパフォーマンス テスト レポートを出力します。これらの指標を通じてパフォーマンスのボトルネックを発見し、ボトムアップで分析できます。

1. まず、システムのCPU、メモリ、I/O、ネットワーク使用率に異常がないかをOSレベルで確認し、コマンドで異常なログを検索し、最後にログ分析でボトルネックの原因を特定します。 。

2. JavaアプリケーションのJVMレベルから、JVMのガベージコレクション頻度やメモリ割り当ての異常の有無を確認したり、ガベージコレクションログを分析してボトルネックの原因を究明できます。

3. システムおよび JVM レベルで異常な状況がない場合は、Java プログラミングの問題、データベースの読み取りおよび書き込みのボトルネックなど、アプリケーション サービス ビジネス層からのパフォーマンスのボトルネックがあるかどうかを確認できます。

5. パフォーマンスの問題を最適化する場合、トップダウン戦略を使用して最適化できます。

全体的なチューニング シーケンスでは、ビジネス チューニングからプログラミング チューニング、そして最後にシステム チューニングに進みます。

1. アプリケーション層のチューニング

1 つ目はコードの最適化です。コードによってメモリ オーバーフローが発生して JVM のメモリが不足したり、FullGC が頻繁に発生して CPU が高くなるなど、システム リソースの消費によってコードの問題が顕在化することがよくあります。

2つ目は設計の最適化で、主にビジネス層とミドルウェア層のコードを最適化することで、例えば、頻繁に呼び出されるオブジェクトを作成する場面ではプロキシモードを利用したり、作成したオブジェクトを共有したりすることができます。オブジェクトの作成にかかる消費量を削減します。

3 番目はアルゴリズムを最適化し、適切なアルゴリズムを選択して時間の複雑さを軽減します。

2. ミドルウェアチューニング:MySQLチューニング

1) テーブル構造とインデックスの最適化

主にデータベース設計、テーブル構造設計、インデックス設定次元の最適化を目的としており、テーブル構造を設計する際には、データベースの水平方向および垂直方向の拡張性を考慮し、将来のデータ量、読み取りおよび書き込み量の増加を事前に計画し、およびサブデータベースの計画 サブテーブル計画。より小さいデータ構造を優先して、フィールドに適切なデータ型を選択します。

2) SQL文の最適化

これは主に、SQL ステートメントを最適化し、実行計画を表示するために Explain を使用し、インデックスが使用されているかどうか、およびどのインデックスが使用されているかを確認するために使用されます。Profile コマンドを使用して、ステートメント実行プロセスの各ステップの時間消費を分析することもできます。

3) MySQLパラメータの最適化

主に、接続数の管理などのMySQLサービスの構成の最適化や、インデックスキャッシュ、クエリキャッシュ、ソートキャッシュなどの各種キャッシュのサイズの最適化を目的としています。

4) ハードウェアおよびシステム構成

オペレーティング システム パラメータの調整、スワップの無効化、メモリの増設、ソリッド ステート ドライブのアップグレードなど、ハードウェア デバイスとオペレーティング システムの設定を最適化します。

3. システムのチューニング

1つ目はOSのチューニングであり、Linux動作のカーネルパラメータ設定をチューニングすることで、高いパフォーマンスを実現することができます。

次に、JVM チューニング、適切な JVM メモリ空間の設定、およびガベージ コレクション アルゴリズムを使用してパフォーマンスを向上させます。たとえば、ビジネス ロジックで大きなオブジェクトが作成される場合、大きなオブジェクトを古い世代に直接設定できます。これにより、頻繁に発生する YongGC を減らすことができます。若い世代では、CPU 使用時間を削減します。

4. チューニング戦略

1 つ目は、時間をスペースと交換することです。場合によっては、システムは高いクエリ速度を必要とせず、高いストレージ容量を必要とします。このとき、時間をスペースと交換することを検討できます。

第 2 に、スペースを時間と交換し、アクセス速度を向上させるためにストレージ スペースを使用します。典型的な戦略は、MySQL のサブデータベースおよびサブテーブル戦略です。MySQL フォーム データが数千万以上保存されると、読み取りおよび書き込みのパフォーマンスが低下します。このとき、クエリを達成するためにデータを分割することができ、パフォーマンスを向上させるという目的を達成するために、各テーブルのデータは少量になります。

5. 一進一退の戦略

システムを調整した後でも、パフォーマンスの問題は依然として残ります。この時点では、ボトムアップ戦略が必要です。最初は、フローを制限し、システムの入り口に最大アクセス制限を設定し、ヒューズを取得することです。失敗したリクエストを返すための手段。2つ目は水平方向の拡張で、トラフィックが一定の閾値を超えた場合に、システムが自動的にサービスを水平方向に拡張することができます。

以下はサポート情報です。[ソフトウェア テスト] を行う友人にとって、これは最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅にも同行してくれました。あなたにも役立つことを願っています。

ソフトウェアテストインタビューアプレット

ソフトウェア テストの質問バンクには、何百万人もの人が参加しました。誰が知っているのか!ネットワーク全体で最も包括的なクイズ ミニ プログラムです。携帯電話を使用して、地下鉄やバスの中でもクイズに答えることができます。

次の面接の質問セクションが取り上げられます。

1. ソフトウェアテストの基礎理論、2. Web、アプリ、インターフェース機能テスト、3. ネットワーク、4. データベース、5. Linux

6. Web、アプリ、インターフェイスの自動化、7. パフォーマンス テスト、8. プログラミングの基本、9. 時間面接の質問、10. 公開テストの質問、11. セキュリティ テスト、12. コンピューターの基本

情報取得方法:

おすすめ

転載: blog.csdn.net/IT_LanTian/article/details/131743837