スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

開いているデータベースを特定する

2009年04月24日 00:03

NSDでFatal Stackを探したあとはこのスレッドがどんなデータベースを開いているかが気になるかもしれません。

もちろん「Fatal Stackが開いている文書 = 問題の原因」とは限らないので、スタック情報と鑑みてこの手の話は判断しないといけないのですが、問題切り分けの参考になる事は多いのではないかと思います。

まず前回使った以下のFatal Threadを考えましょう。

Fatal Thread の出力
############################################################
### thread 1/25: [ ntvdm: 0a74: 0cd8] FATAL THREAD
### FP=0013b260, PC=7c94eb94, SP=0013b1fc
### stkbase=00140000, total stksize=212992, used stksize=19972
############################################################
[ 1] 0x7c94eb94 ntdll.KiFastSystemCallRet+0 (b10,493e0,0,13b7e4)
[ 2] 0x7c802532 kernel32.WaitForSingleObject+18 (b10,493e0,3,13ba00)
@[ 3] 0x60193f25 nnotes.OSRunExternalScript@8+1269 (12c,1,1,0)
@[ 4] 0x601943ba nnotes.FRTerminateWindowsResources+986 (1,0,1010,1)
@[ 5] 0x6019477f nnotes.OSFaultCleanupExt@24+895 (1284bd0,1010,0,0)
@[ 6] 0x6019480a nnotes.OSFaultCleanup@12+26 (0,1010,0,10ec8d0f)
@[ 7] 0x601a0624 nnotes.OSNTUnhandledExceptionFilter@4+276 (13cd60,2b3,54200a0a,61657268)
@[ 8] 0x60178551 nnotes.Panic@4+481 (60b82d3b,10ec8d10,13cd8c,60008c62)
(略)
NSDでは、「開いているデータベース」、「開いているビュー」、「開いている文書」などは別のセクションに表示されますが、ここではもっと簡単な情報として仮想スレッド毎にこれらの情報をまとめて出力している「VThreadセクション」から情報を拾う事を紹介します。

上で太字で示したプロセスID+Native ThreadID(またはPhysical Thread IDと呼ばれます)の情報をキーに探すと、以下のようなセクションが見つかります。
VThread セクション
** VThread [ ntvdm: 0a74: 0002]
.Mapped To: PThread [ ntvdm: 0a74: 0cd8]
.. SOBJ: addr=0x07dc3cf8, h=0xf0107056 t=0xca35 (BLK_TRACECONNECTION)
(略)
.. SessionID: fIOCP=N, [ 1: 1926] addr: ???: ???
(略)
.. Database: CN=Dxxxxxxx/OU=xx/OU=xx/O=xx!!mail\Dxx\Mxxxxx.nsf
.... DBH: 53, By: CN=Hirotaka Nagashima/OU=xx/O=xx, WasAccessed=No
...... doc: HDB= 53, NoteID= 0, hNote=0x29ad, flags=0000, class=0001
.... DBH: 56, By: CN=Hirotaka Nagashima/OU=xx/O=xx, WasAccessed=No
...... doc: HDB= 56, NoteID=2298, hNote=0x2a8d, flags=2200, class=0001
...... doc: HDB= 56, NoteID=18618, hNote=0x2ab5, flags=0200, class=0001
...... doc: HDB= 56, NoteID=589682, hNote=0x2b6f, flags=0200, class=0001
(略)
.... DBH: 242, By: CN=Hirotaka Nagashima/OU=xx/O=xx, WasAccessed=No
...... doc: HDB= 242, NoteID=222382, hNote=0x348a, flags=2000, class=0004
...... doc: HDB= 242, NoteID=220746, hNote=0x2bd0, flags=2000, class=0200
...... doc: HDB= 242, NoteID=220750, hNote=0x2bf0, flags=0000, class=0004 [Form Name="DelOptionInterim"]
...... doc: HDB= 242, NoteID=220758, hNote=0x2c0f, flags=0000, class=0004 [Form Name="(FollowUpMemoSubform)"]
(略)
.. file: fd: 680, C:\lotus\notes\data\~notes.lck
.. file: fd: 1180, C:\lotus\notes\data\user.dic
.. file: fd: 1540, C:\lotus\notes\panose.dat
(略)

太字にした部分がマッチするのが分かるでしょうか?
Vthread毎にここは表示されますが、ここを使用しているPhysical Threadの情報も表示されるのでここで使用する事が出来るのです。

ここの一覧に表示されたDatabase:やdoc:などの情報から開いているデータベースや文書・ビューの情報が分かるようになります。

前回のVThreadの話がちょっと面白くないと思った人もいるのかもしれないのですが、このセクションがNativeスレッドではなく仮想スレッド単位でレポートされているので、仮想スレッドの話も簡単にしておいた方がよいかな、と思って1クッション入れていました。

前回のVThreadの話がちょっと面白くないと思った人もいるのかもしれないのですが、このセクションがNativeスレッドではなく仮想スレッド単位でレポートされているので、仮想スレッドの話も簡単にしておいた方がよいかな、と思って1クッション入れていました。

分かりにくい点もあると思いますが、とりあえずは開いているビューやら文書やらの情報が探せるようになれば便利なのではないかな、と思います。



コメント

    コメントの投稿

    (コメント編集・削除に必要)
    (管理者にだけ表示を許可する)

    トラックバック

    この記事のトラックバックURL
    http://hnagasim.blog8.fc2.com/tb.php/137-60e509e4
    この記事へのトラックバック


    最新記事


    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。