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