ページの先頭です。
ここから本文です。

お知らせ

[WebOTX] WebOTX Application ServerのTransactionサービスにおいて、デッドロックが発生する場合がある問題について

概要

WebOTX Application Serverにおいて、TransactionサービスでJDBCリソースもしくはJCAリソースが登録されている場合、デッドロックが発生する場合があります。


問題の詳細

WebOTX Application Serverにおいて、TransactionサービスでJDBCリソース、もしくはJCAリソースが登録されている場合、次の処理の延長でデッドロックが発生する場合があります。

  • ドメイン起動時
  • アプリケーションのプロセス終了時のトランザクションのリカバリ処理
  • 2フェーズコミットの最初のprepare実行

本障害が発生すると、JNIから呼び出したnative処理でデッドロックが発生するため、ドメインがストールし、正常にドメイン起動もしくはドメイン停止が行えなくなります。

JNIから呼び出したnative処理でデッドロックが発生しているかどうかは、エージェントで出力可能なスレッドダンプもしくはプロセスグループが異常終了時に出力するスレッドダンプから確認できる場合があります。

例:デッドロックしているスレッドの例

"xxxx-x" prio=8 tid=60000000011c4800 nid=159 lwp_id=-1 waiting for monitor entry [9fffffff5689c000]
java.lang.Thread.State: BLOCKED (on object monitor)
at jp.co.nec.WebOTX.TS.comlib.shmem.ShmemRcsManageAccess.unlock(ShmemRcsManageAccess.java:xxx)
- waiting to lock <9fffffffdc4f29e0> (a jp.co.nec.WebOTX.TS.comlib.shmem.ShmemLock)
(以下略)

"xxxx-x" daemon prio=10 tid=0x00007eff7d0c6000 nid=0x1239 waiting for monitor entry [0x00007eff596a7000]
java.lang.Thread.State: BLOCKED (on object monitor)
at jp.co.nec.WebOTX.TS.comlib.shmem.ShmemDatabaseInfoAccess.unlock(ShmemDatabaseInfoAccess.java:xxx)
- waiting to lock <0x00000000c3eace38> (a com.nec.woshmem.ComSharedMemory)
(以下略)

回避方法

V8以降で2フェーズコミットを利用している場合には回避方法はありませんのでパッチを適用していただく必要があります。
それ以外の場合は次の回避手順を実施することを検討してください。不明な点等ありましたら、お問い合わせください。

回避手順

  1. V8以降で2フェーズコミットを行わない場合、もしくはV7以前の場合、ドメイン起動前に予めデータベースサーバを起動するようにしてください。
  2. JDBCリソースおよびJCAリソースの登録状況を確認します。
    JCAリソースが登録されていないことを確認してください。JCAリソースが登録されている場合、回避できませんのでパッチの適用をご検討ください。
    JDBCリソースが登録されている場合は次の手順に進んでください。

    運用管理ツールの場合:
      [WebOTX管理ドメイン[<ホスト名>]]
       -[<ドメイン名>]
        -[アプリケーションサーバ]
         -Transactionサービス
          -[リソース]
           -jca-resource
            * この配下にリソースがある場合、JCAリソースが登録されています。
           -jdbc-resource
            * この配下にリソースがある場合、JDBCリソースが登録されています。

    運用管理コマンドの場合:
    otxadmin> login --user admin --password adminadmin
    otxadmin> list server.transactionservice

    * 結果中に "server.transactionservice.resources.jca-resource."で始まるリソースがある場合、JCAリソースが登録されています。 "server.transactionservice.resources.jdbc-resource."で始まるリソースがある場合、JDBCリソースが登録されています。

  3. JDBCリソースが登録されていて、2フェーズコミットを利用していない場合、3-1.と3-2.を実施してください。
    • 3-1. データソースの種別を"JDBC API"(コマンドでは"JDBC")に変更してください。
    • 運用管理ツールの場合:
        [WebOTX管理ドメイン[<ホスト名>]]
         -[<ドメイン名>]
          -[リソース]
           -JDBCデータソース
            -[<JNDIサーバへの登録名>] (例:jdbc/Oracle)
             データソースの種別 を "JDBC API"に変更

      運用管理コマンドの場合:

      otxadmin> login --user admin --password adminadmin
      otxadmin> set server.resources.jdbc-datasource.<JNDIサーバへの登録名>.dataSourceType=JDBC
      * JNDIサーバへの登録名がjdbc/Oracleの場合、/に対し以下のようにエスケープを指定してください。
      otxadmin> set server.resources.jdbc-datasource.jdbc\/Oracle.dataSourceType=JDBC

      V8.4未満の場合は設定変更後ドメインもしくはプロセスグループの再起動を行ってください。
      V8.4以降の場合はデータソースの種別の変更後、次の設定内容変更の反映を行ってください。

      運用管理ツールの場合:
        [WebOTX管理ドメイン[<ホスト名>]]
         -[<ドメイン名>]
          -[リソース]
           -JDBCデータソース
            -[<JNDIサーバへの登録名>] (例:jdbc/Oracle)
             にて「設定変更内容の反映」を実行

      運用管理コマンドの場合:

      otxadmin> login --user admin --password adminadmin
      otxadmin> publish-jdbc-datasource <JNDIサーバへの登録名>

    • 3-2. TransactionサービスのJDBCリソースを削除してください。
    • JTA連携有無[useJTA]をtrue(既定値)にしてJDBCデータソースを登録すると、TransactionサービスのJDBCリソースが自動的に作成されます。JDBCデータソースの種別を3-1.で変更しても、TransactionサービスのJDBCリソースは自動的に削除されませんので、手動にて削除してください

      運用管理ツールの場合:
        [WebOTX管理ドメイン[<ホスト名>]]
         -[<ドメイン名>]
          -[アプリケーションサーバ]
           -Transactionサービス
            -[リソース]
             * 右クリックメニューより「JDBC リソースの削除」を選択、リソース名を指定し実行すると削除されます。

      運用管理コマンドの場合:

      otxadmin> login --user admin --password adminadmin
      otxadmin> delete-ts-jdbc-resource <リソース名>

影響のある製品

影響のある WebOTX Application Server のバージョンは次の通りです。

  • WebOTX Transaction Service V5
  • WebOTX Application Server Web/Standard-J/Standard/Enterprise V6
  • WebOTX Application Server Web/Standard-J/Standard/Enterprise V7
  • WebOTX Application Server Express/Foundation/Standard/Enterprise V8
    パッチモジュール(8.42.01.14) 未満のバージョン
  • WebOTX Application Server Express/Standard/Enterprise V9.1、V9.2

対処方法

2フェーズコミットを利用している場合、また、事情により回避方法が適用できない場合、
V8.42およびV9.2では本件の問題に対応する標準修正モジュールを公開しております。
次に示す WebOTX の標準修正モジュールを適用してください。

(注意)コンテンツの閲覧には、WebOTXの保守契約を締結して頂く必要がございます。

その他のバージョンでは、個別のパッチ提供を検討いたしますので、お問い合わせください。


更新履歴

2015/9/29 初版


製品名カテゴリ

WebOTX
WebOTX Application Server

  • コンテンツID: 3010101491
  • 公開日: 2015年09月29日
  • 最終更新日:2018年02月06日
ここからページ共通メニューです。 ページ共通メニューを読み飛ばす。