キャッシュ レプリケーションの監視

Jira Data Center のキャッシュ レプリケーション

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

キャッシュ レプリケーションについての統計情報は、メインの Jira ログ ファイル、atlassian-jira.log に記載されています。これらは、ローカル キューのサイズや、キャッシュ変更のレプリケーションの平均所要時間などの、キャッシュ レプリケーションの詳細を示しています。

記録される統計情報

各ノードは、キャッシュ レプリケーションの状態を示す統計情報を記録します。統計情報には 2 つのタイプがあります。

  • Total: ノードの開始以降に集計された統計情報。

    ログ ファイル内での表示
    Cache replication queue stats per node: {destination_node_id} total stats: {statistics_in_json}
  • Snapshot: 前回のスナップショットの取得後 (既定では 60 秒) に集計された統計情報。

    ログ ファイル内での表示
    Cache replication queue stats per node: {destination_node_id} snapshot stats: {statistics_in_json}

例:

3 ノード クラスタでは、ノード 1 に次の統計情報があります。

  • Total: ノード 1 からノード 2 へのレプリケーション
  • Total: ノード 1 からノード 3 へのレプリケーション
  • Snapshot: ノード 1 からノード 2 へのレプリケーション
  • Snapshot: ノード 1 からノード 3 へのレプリケーション


キャッシュ レプリケーションの監視

統計情報の例

統計は JSON 形式で表示されます。出力例は次のようになります。


統計情報の例を表示...
{
   "timestampMillis":1526489492166, 
   "nodeId":"i-02c18edad029cc01a",
   "queueSize":0,
   "startQueueSize":0,
   "startTimestampMillis":1523651486765,
   "startMillisAgo":2838005401,
   "closeCounter":0,
   "addCounter":320528,
   "droppedOnAddCounter":0,
   "criticalAddCounter":0,
   "criticalPeekCounter":2,
   "criticalRemoveCounter":0,
   "peekCounter":0,
   "peekOrBlockCounter":320528,
   "removeCounter":320528,
   "backupQueueCounter":0,
   "closeErrorsCounter":0,
   "addErrorsCounter":0,
   "peekErrorsCounter":0,
   "peekOrBlockErrorsCounter":2,
   "removeErrorsCounter":0,
   "backupQueueErrorsCounter":0,
   "lastAddTimestampMillis":1526489491576,
   "lastAddMillisAgo":590,
   "lastPeekTimestampMillis":0,
   "lastPeekMillisAgo":0,
   "lastPeekOrBlockTimestampMillis":1526489491576,
   "lastPeekOrBlockMillisAgo":590,
   "lastRemoveTimestampMillis":1526489491580,
   "lastRemoveMillisAgo":586,
   "lastBackupQueueTimestampMillis":0,
   "lastBackupQueueMillisAgo":0,
   "timeToAddMillis":{
      "count":320528,
      "min":0,
      "max":1368,
      "sum":393651,
      "avg":1
   },
   "timeToPeekMillis":{
      "count":0,
      "min":0,
      "max":0,
      "sum":0,
      "avg":0
   },
   "timeToPeekOrBlockMillis":{
      "count":320528,
      "min":0,
      "max":28113261,
      "sum":28375252091,
      "avg":88526
   },
   "timeToRemoveMillis":{
      "count":320528,
      "min":0,
      "max":1448,
      "sum":209845,
      "avg":0
   },
   "timeToBackupQueueMillis":{
      "count":0,
      "min":0,
      "max":0,
      "sum":0,
      "avg":0
   },
   "staleCounter":0,
   "sendCounter":320526,
   "droppedOnSendCounter":0,
   "timeToSendMillis":{
      "count":320526,
      "min":0,
      "max":1768,
      "sum":771778,
      "avg":2
   },
   "sendRuntimeExceptionCounter":0,
   "sendCheckedExceptionCounter":0
}

基本的な監視方法

これらの数個のパラメーターを監視することで、キャッシュ レプリケーションが正常に機能しているかどうかを確認できます。次の表の推奨値を確認し、お使いの環境で表示される内容と比較してください。


パラメーター説明推奨値
queueSize

キューの現在のサイズ (レプリケーションを待機しているキャッシュ変更の数)。

値は 0 に近づける必要があります。

これは、変更が正常にレプリケートされ、キューから削除されたことを示します。

startQueueSize + addCounter

ノードの開始時のキューの初期サイズと、それ以降にキューに追加された変更の数。

startQueueSize + addCounter は、sendCounter および removeCounter と等しくなるはずです。

これは、キューに追加されたすべての変更が正常にレプリケートされ、キューから削除されたことを示します。

sendCounter = removeCounter

他のノードにレプリケートされた変更の数、およびキューから削除された変更の数。

timeToAddMillis

ローカル キューに変更を追加および削除するのにかかる時間。

avg 値は 1 〜 10 ミリ秒に近い値になるはずです。

この値よりも極端に大きい場合、ローカル ホーム ディレクトリが格納されているストレージに I/O の問題が発生している可能性があります。 

timeToRemoveMillis

timeToSendMillis

RMI 経由でローカル キューから他のノードに変更を送信するのにかかる時間。


droppedOnAddCounter

droppedOnSendCounter

キューに追加できなかった変更や、他のノードにレプリケートできなかった変更の数。

値は 0 に近づける必要があります。

これは、すべての変更が正常にキューに追加され、他のノードにレプリケートされたことを示します。


パラメーター

以下の表は、統計情報で確認できるすべてのパラメーターを示します。


すべてのパラメーターを確認...
パラメーター説明

timestampMillis

統計情報が生成されたときのタイムスタンプ。

nodeId宛先ノード ID。
queueSize現在のキュー サイズ (変更の数)。
startQueueSize

ノードが開始されたときの初期キュー サイズ。例えば、20 個の変更リクエストがキューに残っている状態でノードが再起動された場合、ノードが再度稼働すると、このパラメーターは 20 を示します。

startTimestampMillis

このノードでキューが開始されたときのタイムスタンプ。

startMillisAgo

キューがアクティブとなっている期間。

closeCounter

キューの終了後、1 に変更されます。ノードのステータスが offline に変更されると、キューは終了します。


addCounter

キューに加えられた変更の数。

droppedOnAddCounter

キューに加えることのできなかった変更の数。

criticalAddCounter

キューに加えることのできなかった変更の数。ログ ファイルの表示方法:

Critical state of local cache replication queue - cannot add: {cache-operation} to queue: {queue-name}, error: {error-message}
criticalPeekCounter

キューから読み込めなかった変更の数。ログ ファイルの表示方法: 

Critical state of local cache replication queue - cannot peek from queue: {queue-name}, error: {error-message}
criticalRemoveCounter

キューから削除できなかった変更の数。ログ ファイルの表示方法:

Critical state of local cache replication queue - cannot remove localQCacheOp: {cache-operation} from queue: {queue-name}, error: {error-message}.
peekOrBlockCounter

キューから読み込まれた変更の数。これらの変更は後ほどレプリケートされ、キューから削除されます。

removeCounter

キューから削除された変更の数。通常は、これらが正常にレプリケートされたことを意味します。

backupQueueCounter

キューについて作成されたバックアップの数。キューが破損し、読み取りや書き込みができなくなると、バックアップが作成されます。バックアップを作成した後、新しいキューが作成されます。ログ ファイルでの表示方法:

Re-created persistent cache replication queue for node: {destination-node} with id: {queue-name} in : {localq-home}
closeErrorsCounter

キューを終了できない場合に増加します。

addErrorsCounter

キャッシュ変更リクエストをキューに追加できない場合に増加します。

peekOrBlockErrorsCounter

キャッシュ変更リクエストをキューから読み込めない場合に増加します。

removeErrorsCounter

キャッシュ変更リクエストをキューから削除できない場合に増加します。

backupQueueErrorsCounter

キューのバックアップを作成できない場合に増加します。

lastAddTimestampMillis

キューに追加された最後のキャッシュ変更リクエストのタイムスタンプ。

lastPeekOrBlockTimestampMillis
lastPeekOrBlockMillisAgo

キューで読み込まれた最後のキャッシュ変更リクエストのタイムスタンプ。
lastRemoveTimestampMillis
lastRemoveMillisAgo

キューから削除された最後のキャッシュ変更リクエストのタイムスタンプ。

lastBackupQueueTimestampMillis
lastBackupQueueMillisAgo

作成された最後のバックアップのタイムスタンプ。


timeToAddMillisキューに変更を追加するのにかかる時間。
timeToPeekOrBlockMillisキューから変更リクエストを読み込むのにかかる時間。
timeToRemoveMillis

キューから変更リクエストを削除するのにかかる時間。

timeToBackupQueueMillis

キューのバックアップの所要時間。

staleCounter

変更の作成後に宛先ノードが再起動されたためにレプリケートされていない変更リクエストの数。ノードは、再起動後にデータベースから値をロードするため、これらの変更を配信する必要はありません。

sendCounter

正常にレプリケートされた変更の数。

droppedOnSendCounter

レプリケートできなかった変更の数。

timeToSendMillis他のノードに変更をレプリケートするのにかかる時間 (ミリ秒)
sendRuntimeExceptionCounter

発生した回復不能なエラーの数。

sendCheckedExceptionCounter

発生した回復可能なエラーの数。


localq への変更と新しい統計

ここでは、localq に加えられたいくつかの変更点を説明します。

[VIA-COPY] と [VIA-INVALIDATION]

Jira 8.12

JIRA 8.12 以降、コピーによってレプリケートされたキャッシュからのメッセージをレプリケートするチャネルは、無効化によってレプリケートされたキャッシュからのメッセージとは少し異なります。

主な違いは、無効化によってレプリケートされたキャッシュのメッセージは配信が保証されてコピーによってレプリケートされたキャッシュのメッセージは配信が保証されないことです。技術的に、主な違いは次のとおりです。

  • メッセージがキューに追加された後は、ファイルに同期されない [via-copy]

  • キューのサイズが非常に小さい (10x10 k [via-copy]、10x100 k [via-invalidation])

  • 他ノードへの配信が失敗しても再試行しない [via-copy]

  • メッセージはライブ ノード (アクティブなハートビート) にのみ配信される [via-copy]、すべてのアクティブ (オフラインではないアクティブ状態) ノードに配信される [via-invalidation]

このため、異なるプレフィックスの付いた両方のチャネルでは LOCALQ 統計のセットが異なります。

  • [LOCALQ][VIA-COPY]

  • [LOCALQ][VIA-INVALIDATION]

ほとんどの場合、[via-copy] は DBR、ユーザー、グループのレプリケーションに、[via-invalidation] は他のすべてのレプリケーションに関連しています。

上位キャッシュ

Jira 8.13.4

数え切れないほど大量に発生するレプリケーション メッセージの原因がどのキャッシュにあるのかについて、疑問に思ったことはありませんか。きっとあるはずです。しかし今までは、この情報を得るのは本当に難しいことでした。レプリケーション メッセージごとに DEBUG ロギングを有効にして集約する必要がありました。大規模なインスタンスでは生成されるログ メッセージの量も多いため、本番インスタンスでは選択肢にすらならない場合もあります。

これからは、すべての LOCALQ 統計で 上位 10 のキャッシュ コントリビューターが表示されるようになりました。合計統計ではこのインスタンスの開始時点における上位コントリビューターが、スナップショット統計では直近 5 分の上位コントリビューターが表示されます。

これは JIRA 8.14 以降でご利用いただけます。また、JIRA 8.13.4 にもバックポートされたばかりです。

新しい統計の例

...
  "numberOfCaches": 29,
  "addCounterTopN": 1421,
  "addCounterOthers": 113,
  "addCounterByCacheTopN": {
    "UserPropertyManager.ApplicationUser.cache": 543,
    "com.atlassian.jira.crowd.embedded.ofbiz.LazyOfBizUserCache.userCache": 291,
    "com.atlassian.servicedesk.internal.feature.queue.ProjectStateCacheManagerImpl.sdProjectStateCache": 182,
    "com.atlassian.gadgets.renderer.internal.cache.messageBundles": 153,
    "com.atlassian.gadgets.renderer.internal.cache.httpResponses": 94,
    "DbBackedCachedPropertySetManager.jira.properties.cache": 66,
    "com.atlassian.jira.crowd.embedded.ofbiz.OfBizInternalMembershipDao.childrenCache": 37,
    "com.atlassian.jira.crowd.embedded.ofbiz.OfBizInternalMembershipDao.parentsCache": 37,
    "com.atlassian.jira.crowd.embedded.ofbiz.OfBizDirectoryDao.directoryCache": 10,
    "com.atlassian.jira.workflow.CachingDraftWorkflowStore.draftWorkflowCache": 8
  }
...

numberOfCaches - レプリケート中のキャッシュ数 (アクティブにレプリケート中)

addCounterTopN - 上位 N キャッシュによってレプリケートされたメッセージ数

addCounterOthers - 他のすべてのキャッシュによってレプリケートされたメッセージ数

addCounterByCacheTopN - 上位 N (10) キャッシュのソート済みリスト: キャッシュ名 + メッセージ数

したがって、ここで最もアクティブなキャッシュは、1421 + 113 合計レプリケーションから 543 メッセージを送信する UserPropertyManager.ApplicationUser.cache です。

上位 N の設定

上位 10 では不十分な場合は、次のシステム プロパティで値を変更できます。

-Dcom.atlassian.jira.cluster.distribution.localq.stats.queue.names.topN=20

フル ログ メッセージの例

[LOCALQ] [VIA-INVALIDATION] Cache replication queue stats per node: node2 total stats: 
 {
  "timestampMillis": 1610720566437,
  "nodeId": "node2",
  "queueSize": 0,
  "startQueueSize": 0,
  "startTimestampMillis": 1610707317150,
  "startMillisAgo": 13249287,
  "closeCounter": 0,
  "addCounter": 1534,
  "droppedOnAddCounter": 0,
  "criticalAddCounter": 0,
  "criticalPeekCounter": 0,
  "criticalRemoveCounter": 0,
  "peekCounter": 0,
  "peekOrBlockCounter": 1594,
  "removeCounter": 1534,
  "backupQueueCounter": 0,
  "closeErrorsCounter": 0,
  "addErrorsCounter": 0,
  "peekErrorsCounter": 0,
  "peekOrBlockErrorsCounter": 0,
  "removeErrorsCounter": 0,
  "backupQueueErrorsCounter": 0,
  "lastAddTimestampMillis": 1610720560592,
  "lastAddMillisAgo": 5845,
  "lastPeekTimestampMillis": 0,
  "lastPeekMillisAgo": 0,
  "lastPeekOrBlockTimestampMillis": 1610720560592,
  "lastPeekOrBlockMillisAgo": 5845,
  "lastRemoveTimestampMillis": 1610720560595,
  "lastRemoveMillisAgo": 5842,
  "lastBackupQueueTimestampMillis": 0,
  "lastBackupQueueMillisAgo": 0,
  "timeToAddMillis": {
    "count": 1534,
    "min": 1,
    "max": 13,
    "sum": 2124,
    "avg": 1,
    "distributionCounter": {
      "10": 1531,
      "20": 3,
      "50": 0,
      "100": 0
    }
  },
  "timeToPeekMillis": {
    "count": 0,
    "min": 0,
    "max": 0,
    "sum": 0,
    "avg": 0,
    "distributionCounter": {}
  },
  "timeToPeekOrBlockMillis": {
    "count": 1594,
    "min": 0,
    "max": 1549827,
    "sum": 131262632,
    "avg": 82347,
    "distributionCounter": {}
  },
  "timeToRemoveMillis": {
    "count": 1534,
    "min": 0,
    "max": 13,
    "sum": 1376,
    "avg": 0,
    "distributionCounter": {
      "10": 1533,
      "20": 1,
      "50": 0,
      "100": 0
    }
  },
  "timeToBackupQueueMillis": {
    "count": 0,
    "min": 0,
    "max": 0,
    "sum": 0,
    "avg": 0,
    "distributionCounter": {}
  },
  "staleCounter": 0,
  "sendCounter": 1479,
  "droppedOnSendCounter": 0,
  "timeToSendMillis": {
    "count": 1479,
    "min": 0,
    "max": 2114,
    "sum": 8830,
    "avg": 5,
    "distributionCounter": {
      "10": 1461,
      "20": 6,
      "50": 2,
      "100": 2,
      "200": 3,
      "500": 0,
      "1000": 1,
      "5000": 4
    }
  },
  "sendRuntimeExceptionCounter": 7,
  "sendCheckedExceptionCounter": 0,
  "sendNotBoundExceptionCounter": 108,
  "numberOfCaches": 29,
  "addCounterTopN": 1421,
  "addCounterOthers": 113,
  "addCounterByCacheTopN": {
    "UserPropertyManager.ApplicationUser.cache": 543,
    "com.atlassian.jira.crowd.embedded.ofbiz.LazyOfBizUserCache.userCache": 291,
    "com.atlassian.servicedesk.internal.feature.queue.ProjectStateCacheManagerImpl.sdProjectStateCache": 182,
    "com.atlassian.gadgets.renderer.internal.cache.messageBundles": 153,
    "com.atlassian.gadgets.renderer.internal.cache.httpResponses": 94,
    "DbBackedCachedPropertySetManager.jira.properties.cache": 66,
    "com.atlassian.jira.crowd.embedded.ofbiz.OfBizInternalMembershipDao.childrenCache": 37,
    "com.atlassian.jira.crowd.embedded.ofbiz.OfBizInternalMembershipDao.parentsCache": 37,
    "com.atlassian.jira.crowd.embedded.ofbiz.OfBizDirectoryDao.directoryCache": 10,
    "com.atlassian.jira.workflow.CachingDraftWorkflowStore.draftWorkflowCache": 8
  }
}


最終更新日: 2022 年 1 月 26 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.