New Relic の Java エージェントには、過剰なインスツルメンテーションの影響からアプリケーションを保護するサーキットブレーカーが搭載されています。サーキットブレーカーは、メモリ枯渇の初期症状を検出すると、自動的に"トリップ" を実行し、計測を制限します。エージェントは、サーキットブレーカーがリセットしても安全であると判断して自動的にリセットするまで、トランザクションデータの収集を停止します。
このサーキットブレーカーは、2つのパラメータ(ヒープの使用量とガベージコレクションに費やされた時間 )を考慮して、いつトリップすべきかを決定します。これらのしきい値のデフォルト値はパーセンテージです。
- メモリ閾値:20
- ガベージコレクションのCPU閾値。10%
空きヒープ メモリのパーセンテージがmemory_threshold
未満で、ガベージ コレクションに費やされた CPU 時間がgc_cpu_threshold
を超えると、サーキット ブレーカーが作動します。サーキット ブレーカーが作動すると、エージェントはトランザクション データの収集を停止します。でレポートされるスループット UI は過小報告され、一定期間、トランザクション追跡は表示されません。
記憶力低下の理由
サーキットブレーカーは、メモリーの消耗を検知すると作動します。これにはいくつかの理由があります。
最近導入されたカスタムインスツルメンテーション(XML、APIコール、トレースアノテーション、またはJavaエージェントの カスタムインスツルメンテーションエディタ を使用)、またはビルトインインスツルメンテーションにより、アプリケーションがメモリ枯渇の初期症状を示しています。
アプリケーションで負荷の急増が発生し、メモリ不足の兆候が見られました。この場合、エージェントはスパイクに寄与していませんが、サーキット ブレーカーはリソースを節約し、エージェントがOutOfMemoryErrors
に寄与しないようにするのに役立ちます。
あなたのアプリケーションは、メモリの限界に近い状態で動作するように調整されています。
トラブルシューティング
ブレーカーが落ちてしまった場合は、以下のトラブルシューティングをお試しください。
サーキットブレーカー イベント ページの Top methods by call count テーブルを使用して、過剰にインスツルメントされている可能性のあるメソッドを探します。カスタムインストルメントを特定して無効にします。
一般に、エージェントのメモリ使用量はメソッドの呼び出し回数に比例します。カスタム インストルメンテーションは、トランザクションごとに 10 回程度しか呼び出されないメソッドで使用する必要があります。インストルメンテーションがエージェントに組み込まれている場合は、Java 用の New Relic のカスタム インストルメンテーションドキュメントを確認してください。さらにサポートが必要な場合は、 support.newrelic.comでサポートを受けてください。
アプリケーションのメモリ使用履歴を慎重に確認し、Javaの最大ヒープサイズを増やす必要があるかどうかを判断します。
アプリケーションが期待どおりに動作している場合は、サーキット ブレーカーを無効にすることをお勧めします。サーキット ブレーカーを無効にするには、 newrelic.yml
構成ファイルのcircuitbreaker
スタンザの下にenabled: false
を追加します。
common: &default_settings
メモリ不足の兆候を早期に検出するために、サーキット ブレーカーはmemory_threshold
とgc_cpu_threshold
の 2 つの変数を含む式を使用します。空きヒープ メモリのパーセンテージがmemory_threshold
未満で、ガベージ コレクションの実行に費やされた CPU 時間がgc_cpu_threshold
を超えると、サーキット ブレーカーが作動します。アプリケーションの動作パフォーマンスと動作に基づいて、必要に応じてこれらの値を調整します。
構成の詳細については、 memory_threshold
とgc_cpu_threshold
を参照してください。