Confluence ログに APPARENT DEADLOCK メッセージが頻繁に表示される
プラットフォームについて: Data Center - この記事は、Data Center プラットフォームのアトラシアン製品に適用されます。
このナレッジベース記事は製品の Data Center バージョン用に作成されています。Data Center 固有ではない機能の Data Center ナレッジベースは、製品のサーバー バージョンでも動作する可能性はありますが、テストは行われていません。サーバー*製品のサポートは 2024 年 2 月 15 日に終了しました。サーバー製品を利用している場合は、アトラシアンのサーバー製品のサポート終了のお知らせページにて移行オプションをご確認ください。
*Fisheye および Crucible は除く
問題
The following message appears frequently in the atlassian-confluence.log
. There doesn't appear to be any negative impact on the application performance from what has been observed.
2018-12-05 11:43:12,489 WARN [C3P0PooledConnectionPoolManager[identityToken->2yu2zx9zrbkq9i6l1kgv|4b07f267]-AdminTaskTimer] [mchange.v2.async.ThreadPoolAsynchronousRunner] log com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@3eefb34a -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
2018-12-05 11:43:12,489 WARN [C3P0PooledConnectionPoolManager[identityToken->2yu2zx9zrbkq9i6l1kgv|4b07f267]-AdminTaskTimer] [mchange.v2.async.ThreadPoolAsynchronousRunner] log com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@3eefb34a -- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 3
Active Threads: 3
Active Tasks:
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@442a2fb5
on thread: C3P0PooledConnectionPoolManager[identityToken->2yu2zx9zrbkq9i6l1kgv|4b07f267]-HelperThread-#0
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@545e6f5e
on thread: C3P0PooledConnectionPoolManager[identityToken->2yu2zx9zrbkq9i6l1kgv|4b07f267]-HelperThread-#1
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@43cf3636
on thread: C3P0PooledConnectionPoolManager[identityToken->2yu2zx9zrbkq9i6l1kgv|4b07f267]-HelperThread-#2
診断
環境
Confluence
- 任意のデータベースが接続済み
Diagnostic Steps
データベースでの性能低下は見られない
原因
このエラーは、データベース、データベースのコネクション プール、およびデータベースで新しいコネクションを取得するための機能に問題が発生している可能性があることを示します。
いずれの理由においても、データベース サーバーがリブートしたり、ネットワーク障害が発生したりすると、利用可能なデータベース コネクション プール内のすべてのコネクションが切断されます。何らかの理由によってコネクション プールが破損し、利用可能なスレッドがプールに準備されていなかった場合、データベースがリクエストを処理するために緊急のデータベース スレッドを作成しようとしており、それによって遅延が発生していることを説明するため、Confluence はこの問題を APPARENT DEADLOCK メッセージとしてログに記録する場合があります。
ソリューション
データベースのコネクション プール内で問題が発生している場合、破損したコネクションを確認してそれを利用可能なプールから削除するための検証クエリを追加する、データベース構成への小規模な変更で問題の影響を軽減することができます。これは新しいインストレーションでは既定で有効化されています (Confluence 6.5 以降) が、Confluence の以前のバージョンからアップグレードした場合、変更を手動で行う必要がある場合があります。
- Confluence を停止します。
- Perform a safety backup of
<confluence-home>/confluence.cfg.xml
- <confluence-home>/confluence.cfg.xml ファイルを編集します。
PostgreSQL、MSSQL、MySQL 用に次のプロパティを追加します。
<property name="hibernate.c3p0.preferredTestQuery">select 1</property>
- confluence.cfg.xml を保存します。
- Confluence を再起動します。
Oracle データベースを使用している場合、検証クエリは次のように少し異なるものになります。
<property name="hibernate.c3p0.preferredTestQuery">select 1 from dual</property>
データソースに接続されたデータベースでの検証クエリの構成方法の詳細については「データベース コネクションのクローズに対処する」ドキュメントをご参照ください。
Note that this setting doesn't apply to Confluence versions > 7.12.0 due to the implementation of CONFSERVER-62338: Update Default Confluence Configuration.