Linux の OOM-Killer によって Confluence のプロセスが意図せず終了する
問題
Confluence が Linux ホストにインストールされているときに、Confluence のプロセス全体が警告なしで突然終了する。つまり、プロセス ID (pid) がなくなる。
- ブラウザには汎用的な "接続できませんでした" あるいは類似のエラーが表示され、web ページに到達できない旨が示される。
- アプリケーションは適切にシャットダウンされることなく終了されたため、Confluence のアプリケーション ログ (<Confluence ホーム>/logs/atlassian-confluence.log) で特別な情報は確認できない。
- 同様に Tomcat のログ (<Confluence インストール>/logs/catalina.out) にもエラーは記録されない。
原因と診断
Confluence は、shutdown.sh または stop-confluence.sh が発行された場合を除いて自身の pid は終了されません。これらのコマンドが発行された場合、Confluence がシャットダウンのプロセスにあることを示すエントリが atlassian-confluence.log ファイルに記録されます。つまり、Confluence の pid が意図せず終了した場合、外部要因があることを意味します。
例:
kill -9
コマンド- kill コマンドを発行する何らかのスクリプト
- Linux OOM-Killer など、アプリケーションの制御外でプロセスを停止させる他のメカニズム
この KB 記事では Linux OOM-Killer に焦点を当てます。これは、オペレーション システムがそのオペレーションのためにメモリ枯渇が発生したときに、メモリを解放するためにプロセスを犠牲にする、一部の Linux インストールの機能です。これは Confluence のメモリ不足とは異なる点にご注意ください。この例の場合、OS そのものでメモリ不足の危険があり、それを回避するために終了プロセスが開始されています。
ホスト マシンの /var/log/ ディレクトリで syslog または messages を見つけ、pid が終了されたタイミングのタイムスタンプを見つけます。次のようなエントリがある場合、OOM-Killer によってプロセスが停止したことがわかります。
Jan 15 04:20:30 confluence-a kernel: [370087.856050] Out of memory: Kill process 2753 (java) score 320 or sacrifice child
Jan 15 04:20:30 confluence-a kernel: [370087.857773] Killed process 2753 (java) total-vm:2256656kB, anon-rss:400988kB, file-rss:0kB
ソリューション
OOM-Killer が原因である場合は次のようなソリューションが考えられます。
ホスト マシンで利用可能なメモリの量を増やす
- Confluence に割り当てられたメモリまたはマシン上の競合プロセスのメモリを減らす
- OOM-Killer を無効化する (非推奨)
OOM-Killer の処理の詳細については次のページをご確認ください。http://prefetch.net/blog/index.php/2009/09/30/how-the-linux-oom-killer-works/