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]
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]
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 の引数は、折り返さずに一行に記述してください。)
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_HEAPDUMPDIR=<フルパス>
set IBM_JAVACOREDIR=<フルパス>
set IBM_COREDIR=<フルパス>
・Java ユーザー定義関数や、Java ストアード・プロシージャーの場合
下記の設定をインスタンス起動前に設定しておきます。※
set IBM_HEAPDUMPDIR=<フルパス>
set IBM_JAVACOREDIR=<フルパス>
set IBM_COREDIR=<フルパス>
db2set ENVLIST="IBM_HEAPDUMP IBM_HEAPDUMPDIR IBM_JAVACOREDIR IBM_COREDIR"
設定解除には、下記のコマンドを実行します。
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) を確認します。
下記の例では、SAMPLE データベースへ接続した db2bp の AgentEDUI は、3086 と分かります。
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) を確認します。
下記の例では、先に確認した 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)
Was this topic helpful?
Document Information
Modified date:
31 August 2023
UID
swg21628463