イベント システム
アトラシアンのアプリには、中核機能およびアプリがユーザー アクションなどのイベントに応答できるようにする内部のイベント システムがあります。ユーザーがアクションを実行すると、イベントが発生します。イベント システムは登録済みのすべてのイベント リスナーにイベントをディスパッチします。
イベントのディスパッチには 2 種類があります。
- 同期: イベントは即座にイベント リスナーにディスパッチされ、すべてのイベント リスナーがイベントを処理するまでリクエストはブロックされます。
- 非同期: イベントはイベント キューに追加され、バックグラウンドでイベント リスナーにディスパッチされます。イベントが発生したリクエストは、イベント リスナーによるイベントの処理の完了を待機しません。
多くの中核機能では、イベント システムをイベント プロシージャ、イベント リスナー、あるいはその両方として使用しています。また、多くのサードパーティ アプリが、アプリとの統合や重要なアプリ イベントへの応答のためにイベント システムを使用しています。
イベント システムの中断または機能障害は、システムのパフォーマンス、安定性、可用性に影響する可能性があります。
診断ではこれらの深刻な問題についてイベント システムや、高負荷下で問題を発生させる可能性のある事象を監視します。
診断ツールでは以下の問題が監視されます。
- EVENT-1001: An event was dropped because the event queue was full.
- EVENT-2001: A slow event listener was detected.
イベントの完全な説明については以降を参照してください。
EVENT-1001 An event was dropped because the event queue was full エラー
問題
イベント キューが満杯 - ディスパッチを待機しているイベントが多すぎるため、非同期イベントを登録されたイベント リスナーにディスパッチできませんでした。結果として、イベントは処理されず、(中核) 機能で機能障害が発生する可能性があります。障害が発生する機能は、イベントのタイプによって異なります。
これは、イベントの非同期ディスパッチにのみ影響します。
アラートの詳細
EVENT-1001 が起票されると、問題を診断できるよう次のデータが収集されます。
eventType
: the type of event that was droppedqueueLength
: the capacity of the event queuethreadDumps
: a list of thread dumps of all event processing threads that were busy when the event was dropped.
原因
イベントが処理されるよりも早くイベントが発生すると、イベント キューが満杯になる可能性があります。これは一般に、イベントの処理に時間がかかる、または完全にスタックした 1 つ以上のイベント リスナーによって発生します。
これが原因である場合、1 つ以上の EVENT-2001 (遅いイベント リスナーの検出) アラートが発生している可能性があります。これらの EVENT-2001 アラートは、問題のイベント リスナーおよびそれらを提供したアプリを識別するのに役立ちます。
EVENT-2001 アラートで原因を明確に識別できない場合、アラート詳細のスレッド ダンプによって、アラートの時刻に実行されていたイベント処理スレッドを識別します。
1 つのコンポーネントが短時間に多数のイベントを生成すると、イベント キューが満杯になる可能性があります。
問題の軽減策
低速またはブロックされたイベント リスナーが検出され、そのイベント リスナーがクリティカルではないアプリによって提供されている場合、そのアプリは (一時的に) 無効化されます。Marketplace アプリの場合、ベンダーに問題を報告してください。
For Atlassian-provided apps, contact support at https://support.atlassian.com/ja. For apps that were developed in-house, contact the relevant developer.
設定オプション
スレッド ダンプ クールダウン期間: ドロップされたイベントに関するアラートについてスレッド ダンプを生成する頻度を制御します。スレッド ダンプの取得は計算コストが高くなり、頻繁に実行すると大量のデータが生成される可能性があります。
EVENT-2001 A slow event listener was detected WARNING
問題
イベントがイベント リスナーにディスパッチされましたが、そのイベント リスナーでイベントの処理に時間がかかっていました。同期イベントの場合、イベントを発生させたユーザー リクエストが完了するまで長期間待機する必要があったことを意味します。非同期イベントの場合、この期間、イベント処理スレッドの 1 つが他のイベントのディスパッチに利用できなかったことを意味します。
EVENT-2001 は、緊急の問題があることを意味するものではありません。パフォーマンスの問題が発生する可能性があるという警告です (同期イベントの場合)。
EVENT-2001 が頻繁に発生する場合や、高頻度でイベントが発生する (高負荷) 場合、非同期イベント処理が遅延し、イベント キューが満杯になる可能性があります。これは最終的に EVENT-1001 に繋がる可能性があります。
アラートの詳細
EVENT-2001 が起票されると、問題を診断できるよう次のデータが収集されます。
trigger
: the specific event listener that was slow, including the app that registered ittimeMillis
: the time in milliseconds that the event listener spent processing the eventeventType
: the type of event that was processed (slowly).
原因
イベント リスナーはさまざまな理由で遅くなる可能性があります。もっとも一般的な原因は以下のとおりです。
- イベント リスナーがイベント スレッドで長時間かかる操作を実行した。例: インデックス作成や自動化された分析など。
- イベント リスナーがブロッキング I/O を実行した。例: 十分に短いタイムアウトを設定せずに外部システムに HTTP リクエストを送信した。
- イベント リスナーがロックの取得をブロックされた。例: クラスタ ロック、ローカル アプリ ロック、データベース ロックなど。
- システム全体の問題がイベント リスナーに影響し、それによって低速になった。
- システムで長時間の GC の一時停止が発生した。
- システムがデータベース コネクションを使い果たした。
問題の軽減策
ここまでのセクションに記述されている原因のいくつかは、イベント リスナー自体が原因であることを示しています (長時間実行される操作、ブロッキング I/O、短いタイムアウトなしのロックの取得)。これが原因である場合、問題をアプリ ベンダーに報告する必要があります。
Marketplace ベンダーの場合、Marketplace の製品ページの "サポート" セクションに問題を報告する方法の手順が記載されています。
アトラシアンが提供するアプリの場合、課題を起票するか、緊急の場合はアトラシアン サポートにお問い合わせください。
社内開発のアプリの場合、アプリの開発者にお問い合わせください (イベント リスナーが遅くなることを回避する方法のガイドラインについては「Data Center アプリ開発のガイドライン」を参照してください)。
トリガー イベント リスナーが問題の原因で、イベント リスナーがクリティカルではないアプリによって提供されている場合、アプリを (一時的に) 無効化することをご検討ください。
設定オプション
低速イベント リスナー制限: 低速なイベント リスナーに関するアラートが発生するタイミングを制御します。設定された制限よりもイベント リスナーが低速な場合に EVENT-2001 が発生します。
Slow event listener limit overrides: Configures overrides for specific event listeners and/or specific apps. This setting can be used to suppress 'slow event listener detected' alerts for specific event listeners or plugins, which have been determined to not be problematic. The value should be a comma-separated list of configurations of individual triggers, where a trigger is either the plugin-key, or the plugin-key followed by the event listener class name. Overrides are only considered if they specify more lenient limits than the value specified by diagnostics.issues.event.slow.listener.time.millis
.