ヘルス設定¶
概要¶
ヘルス機能の設定はhealth.xmlに記述します。設定には以下のものが含まれています。
- ヘルスシステム - ヘルスシステム本体の設定
- ヘルスチェック - システムのチェックを行う設定
- ヘルスアクション - タスクを実行する設定(サーバ再起動、ヒープダンプの取得、PDFレポート出力など)
- ヘルスコンディション - ヘルスアクションの実行条件を設定
これらの設定を組み合わせて、システムに異常が発生した場合にどのようなタスクを実行するかを決定します。
health.xml¶
health.xmlは以下のパスに配置されています。
- Linuxのパス
- デフォルトのインストールパスの場合
/etc/resin/health.xml
- インストールパスを指定した場合
%RESIN_HOME%/conf/health.xml
Windowsのパス
%RESIN_HOME%/conf/health.xml
デフォルトの設定¶
ヘルス設定に関する各種設定項目には、デフォルトの値が設定されています。
以下に各設定を解説します。
ヘルスシステム¶
ヘルスシステム本体の設定はデフォルトで以下のように記述されています。
<health:HealthSystem>
<enabled>true</enabled>
<startup-delay>15m</startup-delay>
<period>5m</period>
<recheck-period>30s</recheck-period>
<recheck-max>5</recheck-max>
<check-timeout>5m</check-timeout>
</health:HealthSystem>
- enabled - ヘルスシステムを有効に設定
- startup-delay - Resin起動開始からヘルスシステムが監視を始めるまでの遅延時間を15分に設定
- period - ヘルスチェックの監視間隔を5分に設定
- recheck-period - 異常を検知した場合に、再確認を行う監視間隔を30秒に設定
- recheck-max - 再確認を行う回数を5回に設定
- check-timeout - ヘルスチェックのタイムアウトを5分に設定
ヘルスチェック¶
ヘルスチェックはデフォルトで以下のように設定されています。
- <health:ConnectionPoolHealthCheck> - データベースコネクションプールの最大数を超えていないか
- <health:CpuHealthCheck> - CPU使用率が異常に上昇していないか
- <health:HealthSystemHealthCheck> - ヘルスシステムが正常に機能しているか
- <health:HeartbeatHealthCheck> - クラスタのハートビートが正常に機能しているか
- <health:JvmDeadlockHealthCheck> - デッドロックが発生していないか
- <health:MemoryPermGenHealthCheck> - JavaVMのPermGen領域が正常か(空き領域が1MB以上)
- <health:MemoryTenuredHealthCheck> - JavaVMのTenured領域が正常か(空き領域が1MB以上)
- <health:TransactionHealthCheck> - コミットの失敗はないか
コラム
<health:CpuHealthCheck> のデフォルト設定はヘルスステータス「CRITICAL」を返す設定にはなっていません。
環境に応じて必要な場合に critical-threshold 属性を設定してください。
ヘルスアクションとヘルスコンディション¶
ヘルスアクションとヘルスコンディションの設定内容はデフォルトでは以下の通りです。
<health:ActionSequence>
<health:IfHealthCritical time="2m"/>
<health:FailSafeRestart timeout="10m"/>
<health:DumpJmx/>
<health:DumpThreads/>
<health:ScoreboardReport/>
<health:DumpHeap/>
<health:DumpHeap hprof="true"
hprof-path="${resin.logDirectory}/heap.hprof"/>
<health:StartProfiler active-time="2m" wait="true"/>
<health:Restart/>
</health:ActionSequence>
この設定はヘルスシステムがResinの異常を検知した場合、様々な情報を取集した後にResinインスタンスの再起動を行うものです。
以下にその解説を記述します。
- もしヘルスチェックのどれかひとつでも ヘルスステータス「CRITICAL」を返し、その状態が2分間継続した場合
- 情報収集に遅延が発生した場合のために、強制再起動を行うまでの待ち時間を10分後に設定
- JMXダンプを生成
- スレッドダンプを生成
- スコアボードレポートを生成
- ヒープダンプを生成
- hprofフォーマットのヒープダンプを生成
- プロファイラを開始し、2分間分のサーバ情報を生成
- Resinインスタンスの再起動を実行
コラム
<health:IfHealthCritical time=”2m”/>は、ヘルスシステムが行う監視間隔で時間が計られます。
まず5分間隔で監視を行い、ヘルスステータス「CRITICAL」を検知すると、再確認を30秒間隔で行います。
もし、2分間「CRITICAL」のままであった場合Resinの再起動が行われます。途中でヘルスステータスが「CRITICAL」ではなくなると再起動は行われません。
コラム
プロファイルはResinの制限によりPDFレポートに出力されません。
PDFレポートの「CPU Profile」には「A CPU profile was not generated during the selected timeframe.」と記述されます。
また、デフォルトで以下のヘルスアクションが設定されています。
<health:Restart>
<health:IfHealthFatal/>
</health:Restart>
これは、ヘルスチェックのどれかひとつでもヘルスステータス「FATAL」を返した場合Resinインスタンスの再起動を実行する設定です。
デフォルトの設定では下記のヘルスチェックが「FATAL」を返します。
- <health:HealthSystemHealthCheck> - ヘルスシステム自体が異常な状態である場合
- <health:JvmDeadlockHealthCheck> - JavaVMによってデッドロック状態であるスレッドが検出された場合