[Debugging] ハング (フリーズ) したあのコを激しく解析!~DebugDiag & Windbg : 1 / 2

みなさまごきげんよう、ごきげんよう。ういこです。

先週末は声がついに全く出なくなり、電話の際にお客様にご迷惑をおかけしてしまいました。どうも申し訳ございませんでした。それからリアルに寝込んでしまい、気づいたら日曜でした。(家族ごめん)

飲まず食わずで日曜って…。そして今もなんだか頭がふらふらするのですが、明日の夕飯の牛すね肉のシチューの下ごしらえのためにキッチンで鍋を絶賛監視中なのです。牛すね肉は時間をかけてゆっくり煮込むのがよいのですからね。ああ、でも赤ワインがないわ…明日それを入れることにして、明日の夜は半分とりわけてポトフにしよう。うんそうしよう。

今回は私の不摂生でこんなぐったりな状態になってしまいましたが、皆様も人間ですもの、生き物ですもの、節制しててもインフルエンザのくせに出社しちゃった同僚のおかげとかで自分もくらっちゃったり色々具合悪いときありますよね。そんな時もエンドユーザ様から「この件どうすんねん」とか言われたりするわけですよ。そんな時もとりあえずしのぐ裏技、主婦の 3 分 Debugging 第何弾かもう思い出せないけど行ってみましょう。まえがき長くてごめんなさい。あ、ちゃんと前回の続きもそのうちやりますよ。ご安心くださいませ。

【今日のお題】

タヌキ寝入り!?絶賛硬直中!?ノーレスなあのコの本音を(無理やり)キャッチ!

今日は、いわゆる「ハング」現象についてみてみたいです。

ハングって言っても、一見ただ「処理が戻らない」ように見えても、実は内部で一生懸命動いてる場合と、本当に待機状態になってる場合(いわゆるデッドロックなど含む)などがあるのです。

こういう案件では、ただハングしてる!と思ってはいけません。まず、本当に何が中でおこっているのかを調べなくてはいけないのです。これに使えるのが、ハングモードでとった複数のフルダンプです。数秒の間隔でダンプをとり、コールスタック(関数の呼び出し履歴)を見ることで、本当にハングしてるのか、そうでないのかを見極めることができます。これにつかえるのが Windbg と debugdiag なのです。

 

ちなみに、VBScript 遣いの皆様、こんなの関係ない!って思わないでください。

たとえば、処理がえらい遅いときなど、処理の前後でダンプをとってみて、時間がどこで費やされてるか見ることでボトルネック解消することだってできるんですよ。ぜひ引き出しの一つにしてください♪

巷にあまたある Windbg 講座…。皆さんすごいです。たぶん私の 0x2710 倍はすごいです。でも手抜きして何とかするっていうのはたぶん私くらいしか思いつかないんじゃないでしょうかと自負しております。

 

ただ、手抜きというのは言葉が悪いですが、技術云々もいいものの、要は問題が早く解決できることが最も大事なことだと私は思うのです。 これが私の信念です。なんてかっこよすぎ?ははは。

ライトな解析はこのくらいで充分です。それでももっと調べないとわからないって場合などにディープに使って行くのがよいでしょう。そこから先は、たくさんのサイトが役に立ちます。

ただ、私個人の感想なのですが、意外に簡単な使い方のページってないんで、まずツールの間口のステップとして当サイトを踏み台にして連邦の白い悪魔のように羽ばたいてください。

 

さて、debugdiag 様ですが、私のマシンにも入ってなかった!ちょうどいいので入れてみます。

この子は、いろいろ機能があるようですが、私の場合こんなことにしか使ってません。ごめんね、DebugDiag ちゃん…。

Ø ダンプをフルダンプで右クリック一発でとれるよ

Ø 複数個ダンプを取って、ハングなのか、そうじゃないのか解析してくれる

Ø クラッシュしたダンプも解析してくれる

(※1) Windbg でもできるけど、オプションとか面倒 (私はね)

(※2) シンボルパス設定必要ね。シンボルないとちょっとダメだったり

 

1. Install してみる

ここから入手できます。

Debug Diagnostic Tool v1.1

https://www.microsoft.com/downloadS/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&displaylang=en

インストールは簡単。上記からダウンロードしてきた msi をそのまま叩いてけばいいだけ。

以下画面のスナップショットです。楽ちん楽ちん。ちなみに私、[Next>] を狂ったようにクリックしただけで、何も変えてません。あ、使用許諾契約のところはちゃんと読みましたよ♪

1. msi (インストール ファイル) がダウンロードされます。迷わず実行だ!

2. とにかく実行してやりましょう。実行だ!

※ Vista だと、管理者権限で~といわれるので昇格させてあげてくださいね★

 

3. Setup Wiz が表示されます。さあ迷わず Next だ!

4. License Agreement です。英語の勉強だと思って読んでください。レッツリード!

読んで、十分アグリーできるとおもったら、“I Agree” を選んで先に行ってくださいね。

5. Symbol とかについての License Agreement です。英語だと思って (以下略)

読んで、十分アグリーできるとおもったら、“I Agree” を選んで (以下略)

6. インストール場所です。規定でいい人はそのまま。あと、ユーザの部分ですが、私は心が広いので “Everyone” にいたしましたわ。ホホホ (何様?)。まあ普通でいいんじゃないでしょうか。そのままで。そのままの君で!!

7. なんかダンプファイル (*.dmp) とこのツール (Debugdiag) を関連付ける?とか聞かれてるっぽいのと、ヘルプ入れるかいダニー?って聞かれてるのでまあチェックつけたままでいいのではないでしょうか

(ダニーって我ながら誰だ)

 

 

8. 長々色々やってたけどパパ!僕インストールするよ!!だって。長かった。

9. パパ!僕どんどん入れちゃってるよ!! (パパって誰だ。)

10. インストール終わったらここにいます ([スタート] - [すべてのプログラム] – [Debug Diagnostics Tool 1.1] のした。二つありますが、下の [DebugDiag-AnalysisOnly 1.1 (x86)] は文字通り解析専門なので、今回は触れません

2. ダンプとってみるか

さてインストールが終わったので、軽くダンプでもとってみますか。

このインストール後のわくわくしたキモチをどのプログラムにぶつけてやろうと思うアナタ!だめです、はやってはいけませんわ。お気持ちを静めて、まずは生贄を用意してから実際に移ろうではないですか。

今日の生贄 … notepad くん

さあ、メモ帳を一発起動してみてください。Windows キー + R キーで [ファイル名を指定して実行] あたりで、notepad って打って Enter キーっていうのもありですぜヒヒヒ。

1. スタートメニューから、DebugDiag 1.1 (x86) を起動します。

[スタート]

- [すべてのプログラム]

– [Debug Diagnostics Tool 1.1]

- [DebugDiag 1.1 (x86)]

起動するとこんな感じ。

2. おもむろに [ キャンセル ] ボタンをクリック。迷っちゃダメ!!

3. そのままの勢いで [Processes] タブを激しくクリックだ!

…なんかいっぱいプロセスがいるですね。ここから、お目当ての notepad くんをみつけだしてやるですよ。Svchost とかだとたくさんいてどれが対象か見つけ出すの面倒だけど、notepad は一個しかいないはずだから、[Process Name] カラムをそっとクリックして、名前でソートしてみるとよいでしょう。

4. 見つけたぞぐへへへへへ。実は、Task Manager でいちいちPID (プロジェクト・イル・ダークプロセス ID) を見つけてみるの面倒なときはこれが重宝したりします。

ほら見て!パパ!notepad さんたら Process ID が 5252 ですってYO!!

5. 対象のプロセスを右クリックして、[Create Full UserDump] を選択!!

6. DebugDiag 様も、対象のプロセスもしばらくだんまりになりますが、ダンプが取れると元気に戻ってきます。

 

 

7. さて、ダンプとれたら次は 5 秒くらい俺様カウントでかまわないので数えたらもう一度手順 5. をやります。またとれたら 5 秒くらい置いて、もう一度とります。

おおむね 5 個くらいとればいいんじゃないでしょうか。

Point : "ダンプでっかいから空き容量が多いところに設定したい" あなたへ

既定値だと、インストールフォルダの下、たとえば C:\Program Files\DebugDiag\Logs\Misc 配下あたりにダンプファイルとログができます。設定は変えられます。

1. [Tool] – [Options and Settings] を選択します

 

 

 2.    “Manual Userdump Save Folder” を好きなパスにしましょう

 

 

次はこのとれたてのダンプくんたちをどうしてくれるかですが、さすがに長くなって画像も多いし重いページになっちゃったし煮込みもいい感じになってきたので、次にします。ちゃんと書きますからご安心を!

それではまた~

おまけ ( どっちがだ ) : DebugDiag 様をちゃんと解説したページ

文書番号: 931370 - 最終更新日: 2007年4月27日 - リビジョン: 1.2

Debug Diagnostic 1.1 ツールについて

https://support.microsoft.com/kb/931370/ja

文書番号: 919791 - 最終更新日: 2007年3月27日 - リビジョン: 1.1

Debug Diagnostics Tool を使用して、 IIS プロセスの CPU 使用率が高い問題のトラブルシューティングを行う方法

https://support.microsoft.com/kb/919791/ja

~ ういこう@月曜会社いけるのかな ~