IBM Support

[Db2] Java アプリケーション終了時に SIGSEGV で異常終了することがある

Troubleshooting


Problem

Java アプリケーションの終了時に、Db2 クライアント・ライブラリーでアクセス違反 (SIGSEGV) が発生し、異常終了することがあります。

Symptom

javacore に以下のような情報が記録されます。
NULL ------------------------------------------------------------------------
0SECTION TITLE subcomponent dump routine
NULL ===============================
1TISIGINFO signal 11 received
1TIDATETIME Date: 2010/05/19 at 15:10:58
1TIFILENAME Javacore filename: /AUTO/test/javacore224436.1274249458.txt
NULL ------------------------------------------------------------------------
0SECTION XHPI subcomponent dump routine
NULL ==============================
1XHTIME Wed May 19 15:10:58 2010
1XHSIGRECV SIGSEGV received at 0xd3253808 in [/home/db2inst1/sqllib/lib/libdb2.a]. Processing terminated.
1XHFULLVERSION J2RE 1.4.2 IBM AIX build ca142ifx-20061116 (142SR6 + 111682 + 111872 + 110979)
NULL
1XHCURRENTTHD Current Thread Details
NULL ----------------------
2XHCURRSYSTHD "SIGTERM handler" sys_thread_t:0x53D947A8
3XHNATIVESTACK Native Stack
NULL ------------
3XHSTACKLINE at 0xD325397C in sqljcLogCCIError__FP10sqljCmnMgrPCcP10sqlcc_condUclN35
3XHSTACKLINE at 0xD32EF498 in sqljcReceive__FP10sqljCmnMgr
3XHSTACKLINE at 0xD3303ADC in sqljrDrdaArDisconnect__FP7UCintfc
3XHSTACKLINE at 0xD328A8D8 in sqleUCdisconnect
3XHSTACKLINE at 0xD328A488 in sqleUCtermAllCtx
3XHSTACKLINE at 0xD3244F58 in sqleterm__FcP5sqlca
3XHSTACKLINE at 0xD324488C in sqle_ctx_exit_function__Fv
3XHSTACKLINE at 0xD32447A8 in [sqle_myexitlist_function__Fv]
3XHSTACKLINE at 0xD32445EC in sqleExitApplicationEnvironment__FUi
3XHSTACKLINE at 0xD32432D4 in sqlo_execute_list
3XHSTACKLINE at 0xD0215B98 in exit
3XHSTACKLINE at 0xD223E950 in xmExitJVM
3XHSTACKLINE at 0xD21C7064 in JVM_Halt
3XHSTACKLINE at 0xD23BBEA4 in Java_java_lang_Shutdown_haltImpl
3XHSTACKLINE at 0xD21FD95C in mmipInvoke_I_V
3XHSTACKLINE at 0xD21F5B48 in mmipInvokeLazyJniMethod
3XHSTACKLINE at 0xD21D3568 in mmipExecuteJava
3XHSTACKLINE at 0xD21CB194 in xeRunJavaVarArgMethod
3XHSTACKLINE at 0xD21CB428 in xeRunDynamicMethod
3XHSTACKLINE at 0xD21B8534 in threadRT0
3XHSTACKLINE at 0xD224B644 in xmExecuteThread
3XHSTACKLINE at 0xD224FAE4 in threadStart
3XHSTACKLINE at 0xD238DE50 in _start
3XHSTACKLINE at 0xD004C820 in _pthread_body
3XHSTACKLINE at 0xD004C820 in _pthread_body

Cause

このスタックトレースは、Java VM の終了処理中に JDBC ドライバーの出口リスト・ハンドラーが呼び出され、接続コンテキストのリソース終了処理時にアクセス違反 (SIGSEGV) が発生したことを示しています。

Db2 の出口リスト・ハンドラーは、アプリケーション終了時に残っている Db2 のリソースがあれば、リソースの終了処理を行います。
出口リスト・ハンドラーの処理中に Finalizer スレッドが動作し JDBC オブジェクトを開放すると、そのオブジェクトで利用される Db2 のリソースもクリーン・アップされるため、出口リスト・ハンドラーが参照しようとしたポインターが null となり SIGSEGV で異常終了します。

Resolving The Problem

対応策として以下の方法があります。
  1. DB2NOEXITLIST レジストリー変数を設定する
  2. IBM Data Server Driver for JDBC and SQLJ のタイプ 4 接続を使用する
  3. アプリケーション内で JDBC オブジェクトの close() 処理を確実に行う

各対応策の詳細は以下の通りです。
  1. DB2NOEXITLIST レジストリー変数を設定する
    Db2 クライアント側で DB2NOEXITLIST レジストリー変数を設定し、Db2 の出口リスト・ハンドラーが呼ばれないようにします。
    Windows の場合は、 Administrator としてログオンし「DB2 コマンド・ウィンドウ - 管理者」から実行します。
    UNIX/Linux の場合は、インスタンス・オーナーとしてログインして実行します。
    db2set DB2NOEXITLIST=ON
    設定後はアプリケーションの再起動が必要です。
    設定変更による Db2 サーバーへの影響は特にありません。
  2. IBM Data Server Driver for JDBC and SQLJ のタイプ 4 接続を使用する
    IBM Data Server Driver for JDBC and SQLJ (db2jcc.jar または db2jcc4.jar) を使用して JDBC タイプ 4 接続を行うと出口リスト・ハンドラーは呼ばれないため、この現象は発生しません。
  3. アプリケーション内で JDBC オブジェクトの close() 処理を確実に行う
    Connection オブジェクトなどの JDBC オブジェクトの利用が終わったときに、オブジェクトに対してプログラム内で確実に close() が呼ばれるようにします。また、Exception が発生するとオブジェクトに対して close() を呼ぶ通常のコードを通らないことがあるので、Exception ハンドリングを行う時にも close() が呼ばれるように配慮します。JDBC オブジェクトを明示的に close することで、Java VM 終了時の Finalizer スレッドによる JDBC オブジェクトおよび JDBC オブジェクトが使用するリソースの開放を防ぎます。

運用上の考慮点
マルチ・スレッド環境では、排他的に JDBC オブジェクトの終了処理が行われていない場合、出口リスト・ハンドラー以外でも同様のアクセス違反 (SIGSEGV) が発生することがあります。
DB2NOEXITLIST レジストリー変数が設定済みにも関わらずアクセス違反が発生する場合は、JDBC オブジェクトの終了処理がシリアライズされているか確認してください。

関連情報
その他の変数
JDBC および SQLJ のサポートされるドライバー
SIGILL application crash when DB2 libraries dynamically load or unload
 
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m0z0000001jHFAAY","label":"Connectivity-\u003EJDBC"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
26 August 2023

UID

swg21573125