World Map
Java Service Wrapperは、御社Javaアプリケーション製品の安定した信頼性を高める最短最善の方法です。
  • Free Trial
  • Buy Now
wrapper.check.deadlock プロパティ

wrapper.check.deadlock プロパティ

対応バージョン :3.5.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OSIBM z/Linux

この[wrapper.check.deadlock]プロパティは、他のプロパティとの組み合わせで、

デッドロックしたスレッドについてJVMをどのようにモニタリング(監視)するかを設定するために使われます。 これは、何とか回避策がある場合には、難しいような潜在的な致命的な問題を検知して回避するのに、とても役に立ちます。

スレッドのデッドロック・チェックは、少なくともJavaバージョン1.5の利用していることが必要です。 JVMだけはチェックを無視します。

デッドロックのチェックの処理は、わりと高速ですが、 全てのスレッドを一時的にロックしてスナップショットをとりますので、 このプロパティはデフォルトで「FALSE」になっています。

設定例:(デッドロック・チェック:OFF)
wrapper.check.deadlock=FALSE

設定例:

プロパティの詳細について下記をご覧いただきますが、 次のシンプルな例では、デッドロックの場所をログ化するようにWrapperを設定してあり、 即座にJVMを再起動します。

設定例:
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=60
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL

デッドロックって?

複数のスレッドがリソースをロックしているときに、全てのスレッドが無制限に待ち状態になる状態になり、 デッドロックが起きることがあります。

一番シンプルな例だと、スレッドAがオブジェクトAをロックしている状態で、 オブジェクトBのロックを試みるケースのときに、 その間、他のスレッドBがオブジェクトBをロックした状態で オブジェクトAをロックしようと待機しているケースです。 このケースでは、スレッドAは、オブジェクトB待ちのため、オブジェクトAを決して開放されることはありません。 同時に、スレッドBは、オブジェクトAが有効になるのを待っているため、 オブジェクトBをエンドレスで永久にロックしたままになるため、両者とも決して前に進めるはずがありません。

wrapper.check.deadlock.interval プロパティ

対応バージョン :3.5.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OSIBM z/Linux

wrapper.check.deadlock.interval] プロパティでは、 Wrapperがアプリケーションのデッドロックを探すインターバル(一定間隔の周期)のコントロールを可能にします。 最短で1秒毎に1回のインターバルを設定できますが、デフォルトでは「60秒」(1分あたり1回)です。 一般的に、状態が安定していると分かっているアプリケーションの場合には、 このデッドロック・チェックの頻度を大幅に下げることも良いでしょう。

設定例:(60秒毎に1回)
wrapper.check.deadlock.interval=60

wrapper.check.deadlock.action プロパティ

対応バージョン :3.5.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OSIBM z/Linux

wrapper.check.deadlock.action] プロパティでは、デッドロックを検知したとき、Wrapperの動作についてのコントロールを可能にします。 デフォルトの動作では、「RESTART」です。

設定例:(再起動する)
wrapper.check.deadlock.action=RESTART

可能な動作は次のとおり:

  • DEBUG] -

    ログ化されるデバッグ・メッセージを表示します。 これはアクションの発生を把握する目的で利用すると便利です。

  • DUMP] -

    スレッド・ダンプを呼び出します。

  • GC](ver. 3.5.7から) -

    JVMで完全なガベージコレクション掃除を実行します。 完全な掃除をすると、ガベージコレクション中、しばしば全てのスレッドが凍結したりなど引き起こすため、 これを頻繁にするとJVMのパフォーマンスに影響しますのでご理解ください。

  • RESTART] -

    カレントJVMを停止して、新しい「起動の試み(invocation)」の再起動します。

  • SHUTDOWN] -

    JVMを停止して、同様にWrapperも停止します。

  • USER_<n>](プロフェッショナル版) -

    メール送信したり、外部システム・コマンドを実行したりなど、 ユーザー定義イベントを引き起こします。 そのコマンドはSNMPトラップを起こすクリーンナップ動作の稼働から何でも可能なはずです。

  • PAUSE] -

    ポーズ(一時停止)が有効でJVMが動作中の場合、 Javaアプリケーションをポーズ(一時停止)します。 詳細について、[wrapper.pausable] プロパティをご覧ください。

  • RESUME] -

    JVMがポーズ(一時停止)状態で停止している場合、 そのJavaアプリケーションを再開(レジューム)します。 詳細について、[wrapper.pausable] プロパティをご覧ください。

  • SUCCESS] (ver. 3.5.5から) -

    起動失敗の内部カウントをリセットして、 現在のJVM起動が成功したものとしてカウントします。 これはおそらくあまり役に立ちませんが、他のプロパティとの一慣性のために用意しました。

  • NONE] (ver. 3.5.5から) -

    デッドロック検知の事実をログ化しますが、実際には何のアクションも起こしません。

JVMを再起動しないようなアクション、例えば[NONE]アクションは、 デッドロック・チェックが行われるたびに繰り返し発生しますので、ご注意ください。

アクションのリスト化:

複数のアクションをリスト化することも可能で、アクションは指定した順番に発生します。

設定例:
wrapper.check.deadlock.action=DUMP,RESTART

wrapper.check.deadlock.output プロパティ

対応バージョン :3.5.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OSIBM z/Linux

wrapper.check.deadlock.output] プロパティでは、デッドロックを検知したとき、Wrapperがログ化する情報をコントロールを可能にします。 デフォルト出力では、「FULL」です。

設定例:(完全なフルログ)
wrapper.check.deadlock.output=FULL

可能な出力レベルは次のとおり:

  • FULL -

    JVM内部で[WrapperManager]クラスが、 デッドロックで呼び出されたスレッドの完全なスタック・トレース(一時記憶の軌跡)を含む レポートを出力します。

    「FULL(フル)」の出力例:
    INFO   | jvm 1    | WrapperManager Error: Found 2 deadlocked threads!
    INFO   | jvm 1    | WrapperManager Error: =============================
    INFO   | jvm 1    | WrapperManager Error: "Locker-2" tid=18
    INFO   | jvm 1    | WrapperManager Error:   java.lang.Thread.State: BLOCKED
    INFO   | jvm 1    | WrapperManager Error:     at org.tanukisoftware.wrapper.test.DeadLock.lockSecond(DeadLock.java:64)
    INFO   | jvm 1    | WrapperManager Error:       - waiting on <0x000000002fcac6db> (a java.lang.Object) owned by "Locker-1" tid=17
    INFO   | jvm 1    | WrapperManager Error:     at org.tanukisoftware.wrapper.test.DeadLock.lockFirst(DeadLock.java:83)
    INFO   | jvm 1    | WrapperManager Error:       - locked <0x0000000029c56c60> (a java.lang.Object)
    INFO   | jvm 1    | WrapperManager Error:     at org.tanukisoftware.wrapper.test.DeadLock.access$100(DeadLock.java:22)
    INFO   | jvm 1    | WrapperManager Error:     at org.tanukisoftware.wrapper.test.DeadLock$1.run(DeadLock.java:42)
    INFO   | jvm 1    | WrapperManager Error:
    INFO   | jvm 1    | WrapperManager Error: "Locker-1" tid=17
    INFO   | jvm 1    | WrapperManager Error:   java.lang.Thread.State: BLOCKED
    INFO   | jvm 1    | WrapperManager Error:     at org.tanukisoftware.wrapper.test.DeadLock.lockSecond(DeadLock.java:64)
    INFO   | jvm 1    | WrapperManager Error:       - waiting on <0x0000000029c56c60> (a java.lang.Object) owned by "Locker-2" tid=18
    INFO   | jvm 1    | WrapperManager Error:     at org.tanukisoftware.wrapper.test.DeadLock.lockFirst(DeadLock.java:83)
    INFO   | jvm 1    | WrapperManager Error:       - locked <0x000000002fcac6db> (a java.lang.Object)
    INFO   | jvm 1    | WrapperManager Error:     at org.tanukisoftware.wrapper.test.DeadLock.access$100(DeadLock.java:22)
    INFO   | jvm 1    | WrapperManager Error:     at org.tanukisoftware.wrapper.test.DeadLock$1.run(DeadLock.java:42)
    INFO   | jvm 1    | WrapperManager Error:
    INFO   | jvm 1    | WrapperManager Error: =============================
    STATUS | wrapper  | A Thread Deadlock was detected in the JVM.  Restarting JVM.
  • SIMPLE -

    JVM内部で[WrapperManager]クラスが、 デッドロックで呼び出されたスレッドやオブジェクトの簡単な概要だけを含むレポートを出力します。 多くの場合、特によく知られた問題に関しては十分です。

    「SIMPLE(シンプル)」の出力例
    INFO   | jvm 1    | WrapperManager Error: Found 2 deadlocked threads!
    INFO   | jvm 1    | WrapperManager Error: =============================
    INFO   | jvm 1    | WrapperManager Error: "Locker-2" BLOCKED waiting on a java.lang.Object owned by "Locker-1"
    INFO   | jvm 1    | WrapperManager Error: "Locker-1" BLOCKED waiting on a java.lang.Object owned by "Locker-2"
    INFO   | jvm 1    | WrapperManager Error: =============================
    STATUS | wrapper  | A Thread Deadlock was detected in the JVM.  Restarting JVM.
  • NONE -

    JVM内部で[WrapperManager]クラスが、全ての出力を抑えます。 これはシステム製品の利用に向いています。 問題は把握しており、たくさんのログ情報を望まない、あるいは、保持する必要がない、ケースに適しています。 その他の選択として、Wrapperプロセスは、 トリガーされたアクションが発生した理由を提供するために、 常に一行のエントリをログ化しています。

    「NONE(なし)」の出力例
    STATUS | wrapper  | A Thread Deadlock was detected in the JVM.  Restarting JVM.