Java Service Wrapper は、モニタリング(監視)、問題発生時にはリカバリー(回復)や メール通知など、豊富な機能を装備しています。 これらの機能は並行して動作し、可能ならその原因情報も含め、問題を知らせるメール通知を実行し、 アプリケーションが最大限に稼働できるように役に立ちます。

詳細

デッドロック検知

Deadlock

Java アプリケーションのマルチスレッドにおいて、スレッドデッドロックの可能性は十分にあります。 デッドロックを改善することは非常に難しく、むしろ現実の世界と同じ環境をアプリケーションで再現するのは 不可能に近いでしょう。 より多くのスレッドが利用されればされるほど、デッドロックを起こすリスクが高まるという現実があるのは、仕方がありません。 ディベロッパー(開発者)にとって、デッドロックが発生した場所を追究するだけでなく、 それを引き起こすイベントの組み合わせまで検証し、問題の原因を追究していくことは大変困難なことです。

この機能について詳しくは、テクニカルセクションをご覧ください。

JVM フリーズ自動検知

通常の運用では、Wrapper は JVM へ5秒ごとに ping を実行し、プロセスがフリーズしていないことを確認します。 ping タイムアウトとは、JVM がハングアップ状態であると判定してその JVM を再移動させる前に、 Wrapper が JVM からの応答待ちをする待機時間数です。

Java Service Wrapper がほとんどの JVM フリーズを迅速に検出することができ、すぐにアプリケーションを再起動出来ます。 起きたことを記載するレポートが生成され、送信されますので、管理者は、すべてが正しく機能していることを確認するために 二重チェックを行うことができます。

Java Service Wrapper が JVM フリーズを検知する方法について、 さらに詳しくは「ping タイムアウトプロパティ」ページをご覧ください。 それぞれのJavaアプリケーションは異なるため、 これらのパラメータを設定したり、無効にしたり、それぞれに応じて設定することができます。

この機能について詳しくは、テクニカルセクションをご覧ください。

JVM クラッシュ自動検知

Wrapper は JVM プロセスを常にモニタリング(監視)して、JVM プロセスのクラッシュを即座に検知して、 JVM を再起動することでリカバリー(回復)させ、アプリケーションの停滞時間を最小限に抑えることができます。 デフォルトでは、Wrapper がアプリケーションを再起動するまで5秒待機します。

この延長の長さは必要に応じて変更できますが、OS がメモリやクラッシュした JVM に関連していたリソースを 解放する時間がある事を確認してください。 詳しくは[wrapper.restart.delay] プロパティをご覧ください。

この機能について詳しくは、テクニカルセクションをご覧ください。

オンデマンド JVM 再起動

Java Service Wrapper では、Java アプリケーションに JVM を再起動するようにリクエストさせることができます。 これは様々なケースで便利に活用できます。 あるアプリケーションでは、コンフィギュレーションの変更後に再起動が必要かもしれませんし、 あるいは、メモリーやリソースリークの問題を避けるために単に再起動が必要な場合もあります。

JVM 再起動は、JVM 内部から WrapperManager.restart() を呼び出すことでトリガーすることが出来ます。 詳しくは、下記の Java API ドキュメンテーションをご覧ください。 それ以外。 再起動のキッカケを引き起こすための、もっと受動的な手法もいくつかあります。詳細についてはクイックスタートページをご覧ください。

この機能について詳しくは、テクニカルセクションをご覧ください。

メール自動通知

Deadlock

メール内容をカスタマイズして、Wrapper のログファイルの一部を添付して、メールを送信することができます。 これはシステム管理者にとって便利な機能であり、解決に向けてのさらなるアクションが必要かどうか判断に役立ちます。

Wrapper は、特定のイベントに応じて、メール通知を送信することが出来ます。 使用例や詳細についてはイベントメール概要ページをご覧ください。

この機能について詳しくは、テクニカルセクションをご覧ください。

ユーザー定義アクショ

フィルターはとてもパワフルな機能であり、既存アプリケーションにコーディングの変更をする必要はなく、 新しい動作を追加することが可能です。 これは JVM のコンソール出力の文字列をモニタリング(監視)することで動作します。 該当する文字列が検出された場合、いくつでも指定したアクションを実行させることができます。

外部コマンドを含むシステムコマンドは、任意のイベントに応答して実行できます。 これらは、システムのクリーンアップを行ったり、通知を送信したり、ネイティブにしか処理できないアクションを 実行したりするのに役立ちます。 フィルターを追加するには、「トリガー」と「アクション」を指定する必要があります。 その指定するトリガーやアクション数に制限はなく、好きな数だけ設定することができます。 フィルターシステムや可能なアクションのリストについて、 さらに詳しくは「フィルタープロパティ」ページをご覧ください。

JVM タイムアウトの停止/再開

Wrapper は、JVM をモニタリング(監視)するときに複数のタイムアウトを利用します。 タイムアウト値を超えた場合、Wrapper が複数のアクションを実行し、JVM を次の状態に移行させます。 ほとんどのタイムアウトは、通常の状況でアプリケーションが起動、停止、応答するのに必要な 予想時間を Wrapper に知らせます。

レアなケースでは、 しかし、まれに Java コードから JVM を一時的に応答しなくなる長いブロックタスクを実行したい場合もあるでしょう。 Wrapper がそれを JVM フリーズだと判断しないために、タスクを開始する前にタイムアウトを停止し、タスク終了後にタイムアウトを再開すると便利です。

これらは、バージョン 3.5.40 以上で、コマンドファイル、或いはフィルタータイマーデッドロックチェックからトリガーされたアクション、或いは Java コードから、新しい「WrapperManager.suspendTimeouts()」メソッドと「WrapperManager.resumeTimeouts()」メソッドで可能になります。

タイムアウトの停止や再開方法の詳細については上記リンクをご覧ください。