IBM Support

[Db2] Db2 ツールの javacore 出力先を変更する方法

Question & Answer


Question

Db2 はコントロール・センターなどの GUI ツール、IBM Data Studio などの Eclipse ベースのツールおよび Java ルーチンで Java を利用しています。 これらの問題判別のために、Javacore, heapdump, core, snap trace の出力を設定する方法を教えてください。

Answer

Javacore などの出力先は Java ランタイムの次のオプションで指定できます。

  • -Xdump:heap:file=<フルパスのファイル名> - Heapdump 出力先
  • -Xdump:java:file=<フルパスのファイル名> - Javacore 出力先
  • -Xdump:snap:file=<フルパスのファイル名> - core、snap trace 出力先

【設定方法】

1. コントロール・センターなどの GUI ツールの場合の設定
(Db2 V9.5, V9.7 の Linux および Windows 版のみ)


シェル・スクリプト・ファイルの db2cc (Windows の場合はバッチ・ファイル db2cc.bat) から実行される db2javit のオプション -o: で上記の -Xdump オプションを指定します。
Windows の場合は、いったん環境変数 RUNTIME_FLAGS に -Xdump オプションを設定し、この環境変数をオプション -o: の引数に指定します。
db2cc は sqllib/bin (Windows では SQLLIB\BIN) ディレクトリー内にあります。

[Windows]

変更前の db2cc.bat 抜粋:

set RUNTIME_FLAGS=-Xmx512m -Xms64m -Xquickstart -Xgcpolicy:optavgpause

IF "%1" == "wait" GOTO WAIT
IF "%1" == "-ic" GOTO WSWB
   db2javit -j:CC -s: -i: -l: -o:"%RUNTIME_FLAGS%" -a:"%1 %2 %3 %4 %5 %6 %7 %8"
   GOTO END

変更後の db2cc.bat 抜粋:
(注意: RUNTIME_FLAGS に設定する JVM の引数は、折り返さずに一行に記述してください。)

set RUNTIME_FLAGS=-Xmx512m -Xms64m -Xquickstart -Xgcpolicy:optavgpause -Xdump:heap:file=<フルパスのファイル名> -Xdump:snap:file=<フルパスのファイル名> -Xdump:java:file=<フルパスのファイル名>

IF "%1" == "wait" GOTO WAIT
IF "%1" == "-ic" GOTO WSWB
   db2javit -j:CC -s: -i: -l: -o:"%RUNTIME_FLAGS%" -a:"%1 %2 %3 %4 %5 %6 %7 %8"
   GOTO END

例)
set RUNTIME_FLAGS=-Xmx512m -Xms64m -Xquickstart -Xgcpolicy:optavgpause -Xdump:heap:file=C:\LOG\heapdump.%%Y%%m%%d.%%H%%M%%S.%%pid.%%seq.phd -Xdump:snap:file=C:\LOG\snap.%%Y%%m%%d.%%H%%M%%S.%%pid.%%seq.trc -Xdump:java:file=C:\LOG\javacore.%%Y%%m%%d.%%H%%M%%S.%%pid.%%seq.txt

IF "%1" == "wait" GOTO WAIT
IF "%1" == "-ic" GOTO WSWB
   db2javit -j:CC -s: -i: -l: -o:"%RUNTIME_FLAGS%" -a:"%1 %2 %3 %4 %5 %6 %7 %8"
   GOTO END


[Linux]

変更前の db2cc シェル・スクリプト抜粋:

if [ "$1" = "-ic" ]
    then
        db2icdocs
    else
        db2javit -j:CC -i: -l: -o:"-Xmx128m -Xms8m" -a:"$*"
fi

変更後の db2cc シェル・スクリプト抜粋:
(注意: db2javit の -o: オプション に設定する JVM の引数は、折り返さずに一行に記述してください。)

if [ "$1" = "-ic" ]
    then
        db2icdocs
    else
        db2javit -j:CC -i: -l: -o:"-Xmx128m -Xms8m -Xdump:heap:file=<フルパスのファイル名> -Xdump:snap:file=<フルパスのファイル名> -Xdump:java:file=<フルパスのファイル名>" -a:"$*"
fi

例)
if [ "$1" = "-ic" ]
    then
        db2icdocs
    else
        db2javit -j:CC -i: -l: -o:"-Xmx128m -Xms8m -Xdump:heap:file=/log/heapdump.%Y%m%d.%H%M%S.%pid.%seq.phd -Xdump:snap:file=/log/snap.%Y%m%d.%H%M%S.%pid.%seq.trc -Xdump:java:file=/log/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt" -a:"$*"
fi


2. IBM Data Studio など Eclipse ベースのツールの場合

eclipse.ini の最後 (-vmargs より下) に、次の設定を追加します。
eclipse.ini は、exlipse の実行ファイルと同じディレクトリーにあります。

-Xdump:heap:file=<フルパスのファイル名>
-Xdump:snap:file=<フルパスのファイル名>
-Xdump:java:file=<フルパスのファイル名>

例)
-vm
C:\Program Files (x86)\ibm\DS3.1.1\jdk\jre\bin\javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
-install
C:\Program Files (x86)\ibm\DS3.1.1
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101222
-vmargs
-Xquickstart
-Xms40m
-Xmx1024m
-Xgcpolicy:gencon
-Xscmx48m
-Xshareclasses:name=IBMSDP_%u
-Xnolinenumbers
-XX:MaxPermSize=128M
-Xdump:heap:file=C:\LOG\heapdump.%Y%m%d.%H%M%S.%pid.%seq.phd
-Xdump:snap:file=C:\LOG\snap.%Y%m%d.%H%M%S.%pid.%seq.trc
-Xdump:java:file=C:\LOG\javacore.%Y%m%d.%H%M%S.%pid.%seq.txt


3. Java ルーチン (Java UDF もしくは Java ストアード・プロシージャー) の場合
注意: DB2_JVM_STARTARGS レジストリー変数はサポートされた機能ではありません。診断情報取得以外の目的では使用しないでください。

DB2_JVM_STARTARGS レジストリー変数に -Xdump で設定します。
ここで指定するパスには、Fenced User による書き込みが許可されていることを確認してください。
設定の反映には、インスタンスの再起動が必要です。
(レジストリー変数 DB2_JVM_STARTARGS に設定する JVM の引数は、折り返さずに一行に記述してください。)

db2set DB2_JVM_STARTARGS="-Xdump:heap:file=<フルパスのファイル名> -Xdump:snap:file=<フルパスのファイル名> -Xdump:java:file=<フルパスのファイル名>"
db2stop
db2start

例)
db2set DB2_JVM_STARTARGS="-Xdump:heap:file=C:\LOG\heapdump.%Y%%m%d.%%H%M%S.%pid.%seq.phd -Xdump:snap:file=C:\LOG\snap.%Y%m%d.%H%M%S.%pid.%seq.trc -Xdump:java:file=C:\LOG\javacore.%Y%m%d.%H%M%S.%pid.%seq.txt"
db2stop
db2start

設定解除には、下記のコマンドを実行します。

db2set DB2_JVM_STARTARGS=
db2stop
db2start


運用上の考慮点

1. デフォルトの診断情報出力先

  • db2cc のデフォルトの javacore 出力先は、 sqllib/tools です。
  • Eclipse ベースの GUI ツールの javacore 出力先は、eclipse と同じディレクトリーです。
  • db2fmp のデフォルトの javacore 出力先は、Linux、UNIX では /tmp 、Windows では、C:\ProgramData\IBM\DB2\<コピー名>\<インスタンス名> 等となります。


2. -o: オプションもしくは RUNTIME_FLAGS で指定した JVM 引数が長すぎる場合、db2cc が起動しません。パスや、ファイル名を適宜短縮してください。
オプション -Xdump:java:file=<フルパスのファイル名> の指定は、 db2javit のオプション -d:<フルパス> で代替できます。どうしてもオプションを短縮できない場合は、 -d:<フルパス> をお試しください。
(ファイル名は javacore.YYYYmmdd.HHMMSS.pid.seq.txt です。)

例)
set RUNTIME_FLAGS=-Xmx512m -Xms64m -Xquickstart -Xgcpolicy:optavgpause -Xdump:heap:file=C:\LOG\heapdump.%%Y%%m%%d.%%H%%M%%S.%%pid.%%seq.phd -Xdump:snap:file=C:\LOG\snap.%%Y%%m%%d.%%H%%M%%S.%%pid.%%seq.trc

IF "%1" == "wait" GOTO WAIT
IF "%1" == "-ic" GOTO WSWB
   db2javit -j:CC -s: -i: -l: -o:"%RUNTIME_FLAGS%" -a:"%1 %2 %3 %4 %5 %6 %7 %8" -d:C:\LOG
   GOTO END

3. -Xdump オプションの代替方法

何らかの事情で、 -Xdump オプションが使用できない場合は、環境変数を使用した古い方式をお試しください。

・GUI ツールの場合
 下記の設定を、GUI 起動前に設定しておきます。※

set IBM_HEAPDUMP=TRUE
set IBM_HEAPDUMPDIR=<フルパス>
set IBM_JAVACOREDIR=<フルパス>
set IBM_COREDIR=<フルパス>


・Java ユーザー定義関数や、Java ストアード・プロシージャーの場合
 下記の設定をインスタンス起動前に設定しておきます。※

set IBM_HEAPDUMP=TRUE
set IBM_HEAPDUMPDIR=<フルパス>
set IBM_JAVACOREDIR=<フルパス>
set IBM_COREDIR=<フルパス>
db2set ENVLIST="IBM_HEAPDUMP IBM_HEAPDUMPDIR IBM_JAVACOREDIR IBM_COREDIR"


設定解除には、下記のコマンドを実行します。

unset set IBM_HEAPDUMP
set IBM_HEAPDUMPDIR
set IBM_JAVACOREDIR
set IBM_COREDIR
db2set ENVLIST=


※Linux および UNIX の場合で、ksh や bash をご利用の場合は export を、また csh や tcsh をご利用の場合は setenv を set の代わりに使用します。


4. 意図的に javacore 等の診断資料を収集する方法

[Linux、UNIX]

  • Linux および UNIX では、JVM を実行するプロセス (java、javaw、db2fmp(Java)) に対して、SIGQUIT シグナルを送信します。

    kill -3 <PID> (もしくは kill -QUIT <PID>)
  • db2fmp の PID は、次の要領で確認します。


1) アプリケーションに対応するEDUIDの確認

まず下記のコマンドで、アプリケーションの PID (ClientPid) 、アプリケーション・ハンドル (AppHandl) 、もしくは Application ID (LastApplID) にひも付く EDUID (AgentEDUID) を確認します。

db2pd -db <dbname> -agent


下記の例では、SAMPLE データベースへ接続した db2bp の AgentEDUI は、3086 と分かります。

$ db2pd -db sample -agent

Option -agent is an instance scope option.  The database option has been ignored.

Database Member 0 -- Active -- Up 0 days 00:02:23 -- Date 2012-11-26 19:00:41

Agents:
Current agents:      11
Idle agents:         0
Active coord agents: 11
Active agents total: 11
Pooled coord agents: 0
Pooled agents total: 0

Address      AppHandl ... AgentEDUID ... ClientPid ... ClientNm ... DBName LastApplId                   ...
0x0780000003910080 7  ... 3086       ... 14024954  ... db2bp    ... SAMPLE *LOCAL.db2inst1.121126095838 ...


2) EDUID に対応する db2fmp の PID の確認

次に、下記のコマンド出力で、 EDUID (EduPid) に対応する db2fmp の PID (FmpPid) を確認します。

db2pd -db <dbname> -fmp

下記の例では、先に確認した EDUID 3086 に対応する db2fmp の PID は 5767374 であることが分かります。

$ db2pd -db sample -fmp

Option -fmp is an instance scope option.  The database option has been ignored.

Database Member 0 -- Active -- Up 0 days 00:02:36 -- Date 2012-11-26 19:00:54

FMP:
Pool Size:       0
Max Pool Size:   200 ( Automatic )
Keep FMP:        YES
Initialized:     YES
Trusted Path:    /home/db2inst1/sqllib/function/unfenced
Fenced User:     v101fenc
Shared Memory:   0x0780000001750420
IPC Pool:        0x0780000001750480

FMP Process:
Address            FmpPid     Bit   Flags      ActiveThrd PooledThrd ForcedThrd Active IPCList
0x078000000367FAC0 5767374    64    0x00000003 1          0          0          Yes    0x078000000367FFA0

   Active Threads:
   Address            FmpPid     EduPid     ThreadId
   0x078000000367FDC0 5767374    3086       3857

   Pooled Threads:
   Address            FmpPid     ThreadId
   No pooled threads.

   Forced Threads:
   Address            FmpPid     ThreadId
   No forced threads.

FMP Process:
Address            FmpPid     Bit   Flags      ActiveThrd PooledThrd ForcedThrd Active IPCList
0x078000000367E1E0 24903902   64    0x00000008 0          0          0          No     0x078000000367E420

   Active Threads:
   Address            FmpPid     EduPid     ThreadId
   No active threads.

   Pooled Threads:
   Address            FmpPid     ThreadId
   No pooled threads.

   Forced Threads:
   Address            FmpPid     ThreadId
   No forced threads.


[Windows]

  • Windows の場合は、java.exe を起動したコンソール窓より Ctrl+Break キー・シーケンスを入力する必要がありますが、GUI ツールでは、java.exe の代わりにコンソールを起動しない javaw.exe を使用するため、Javacore が取得できません。 Windows 上の GUI ツールの Javacore 取得方法については、DB2 のサポートへ問い合わせください。
    なお、Windows 上では Java UDF や、 ストアード・プロシージャー等のルーチン類の診断資料を意図的に取得することは通常はできません。


関連情報
[-Xdumpを使用した設定]
-Xdump オプションの使用 (Java V7.0)
Using the -Xdump option (Java V6.0)

[環境変数による設定]
環境変数と Javadump (Java V7.0)
Environment variables and Javadump (Java V6.0)

 
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと 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":"a8m0z000000XasLAAS","label":"Java"},{"code":"a8m500000008PmjAAE","label":"Routines - Stored Procedures and UDF-\u003EJava\/Non-SQL Routines"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
31 August 2023

UID

swg21628463