パフォーマンス テスト - メモリ オーバーフロー (ヒープ オーバーフロー、スタック オーバーフロー、永続世代オーバーフロー) 問題の特定と分析 [杭州マルチテスター_王先生] [杭州マルチテスター]...

1. ヒープ メモリ オーバーフロー
1) 一定期間の安定性圧力テストの後、jmeter はエラーを報告し、ログは java.lang.OutOfMemoryError.Java ヒープ スペースを報告します。
2) jmap -histo pid コマンドを使用してヒープ メモリの使用状況をダンプし、ヒープ メモリ内の上位 20 個のオブジェクトを調べて、独自のアプリケーション用のメソッドがあるかどうかを、最も高いものから順に調べます。このメソッドのヒープ メモリがオーバーフローします。
3) 上位 20 位以内に独自の方法がない場合は、jmap -dump を使用してヒープ メモリをダンプし、MAT を使用してダンプされたヒープ メモリを分析し、メモリ オーバーフローをエクスポートする方法を分析します。
4) 適用方法に問題がなければ、JVM パラメータを変更し、xms、xmx を変更し、ヒープ メモリ パラメータを調整し、通常はヒープ メモリを増やす必要があります。


2. スタック メモリのオーバーフロー
1) 一定期間の安定性圧力テストの後、jmeter はエラーを報告し、ログは Java.Lang.StackOverflowError を報告します。
2) jvm パラメータを変更し、xss パラメータを増やし、スタック メモリを増やします。
3) スタック オーバーフローはバッチ操作で発生する必要があるため、バッチ データの量を減らします。
3. 永続的な世代のオーバーフロー
1) 一定期間の安定性圧力テストの後、ログは Java.Lang.OutOfMemoryError.PermGen Space を報告します。
2) この理由は、クラス、メソッドの説明、フィールドの説明、定数プール、アクセス修飾子などの静的変数が多すぎて、永続的な世代がいっぱいになり、永続的な世代がオーバーフローする可能性があるためです。
3) jvm 構成を変更し、XX:MaxPermSize=256 パラメーターを増やします。静的変数を最小限に抑えます。
4. スレッドのデッドロック
1) 一定期間の容量テストと圧力テストの後、LR は接続がタイムアウトしたことを報告しました。
2) この現象には、帯域幅の不足、ミドルウェア スレッド プールの不足、データベース接続プールの不足、接続数の上限など、多くの理由があり、接続が失敗し、タイムアウト エラーが報告されます。
3) jstack コマンドは、スレッド スタックをダンプし、スレッド スタック内のブロックを検索します. スレッド デッドロックがある場合は、デッドロックされたスレッドを見つけ、対応するコードを分析します.
5. データベースのデッドロック
1) 一定期間の容量テストと圧力テストの後、LR は接続がタイムアウトしたことを報告しました。
2) この現象には、帯域幅の不足、ミドルウェア スレッド プールの不足、データベース接続プールの不足、接続数の上限など、多くの理由があり、接続が失敗し、タイムアウト エラーが報告されます。
3) データベース ログでブロックを検索します。ブロックが見つかった場合は、データベース デッドロックが発生しています。ログを見つけて、対応する SQL を確認し、デッドロックの原因となった SQL を最適化します。

おすすめ

転載: blog.csdn.net/weixin_39362573/article/details/129193198