locked
Internet Explorer 利用時のハングやクラッシュについて RRS feed

  • 全般的な情報交換

  • (※ 2017 年 10 月 27 日に Japan IE Support Team Blogに公開した情報をアーカイブする目的で、Microsoft 社員にて改めて公開しております。)

    こんにちは。Internet Explorer / Microsoft Edge サポートの張替です。Internet Explorer を利用してインターネット サイトにアクセスするとハングしてしまう (応答なしの状態になってしまう) というお問い合せが、少し前に何件か立て続けに弊社サポートに寄せられたことがありましたので、今回は、既知の現象と合致しているかどうかをお手元でもご確認いただくことができるものの一例として、確認ポイントなどを紹介したいと思います。

     

    Web ブラウザーは「プラットフォーム」である

    先日、本ブログにて「メモリー使用量が増える現象 (メモリリーク)」というお話の中でもお伝えしていますが、Internet Explorer をはじめとする「Web ブラウザー」 は Web コンテンツ (html や CSS、JavaScript、画像、動画など) を表示 / 動作させるための「プラットフォーム」です。ブラウザーというプラットフォーム上で動作する Web コンテンツの構成やその中で行われている処理に依存して生じる現象が多く、また、Internet Explorer の場合には、ActiveX コントロールやブラウザー ヘルパー オブジェクト (BHO)、ツール バーといった「アドオン」の影響を受けて生じる現象もあります。

    このような背景から、「ハングしてしまう」「クラッシュ(異常終了)してしまう」といった現象も含めて、Internet Explorer の動作に関するお困りごとをお問い合せをいただいたときに、最初にエンジニアからお話させていただくことが多い「問題を絞り込むためのポイント」としては以下のようなものがあります。

     

    • 環境ごとに同一の操作をした場合に再現頻度や有無に差異がないか確認する
    • 最新の更新プログラムを適用する
    • アドオン無効を試す
    • サードパーティー製ソフトウェアをアンインストールする
    • OS(や最低限必要なアドオンや更新を適用した)クリーンな環境で試す
    • コンテンツを切り分ける

     

    これらの切り分けポイントの詳細については「メモリー使用量が増える現象 (メモリリーク)」の記事に記載していますので併せてご覧いただければと思います。

     

    ハングやクラッシュという現象について

    Internet Explorer 自体の問題で、ハング (応答なし) やクラッシュ (異常終了) が生じることがありますが、弊社製品の既知の修正済みの問題に該当する場合、最新の更新プログラムを Windows Update などから適用することで改善します。

    このように、「最新の更新プログラムを適用する」を含む上記のような問題の切り分けは、お困りの現象について正確に把握して調査方針を具体化していくために非常に重要となりますが、このような対応が難しい場合もあろうかと思います。ハングやクラッシュに関しては、現象発生時のプロセス ダンプを取得してそれを弊社サイトから入手できるツールを利用し確認することで、みなさまのお手元でもある程度の状況を把握いただける現象の場合もあります。その一例として「あるインターネット サイトを表示しようとしたときに応答なしになってしまい操作ができなくなることがたびたび起こる」という事象を取り上げてみようと思います。

    なお、私たちサポート エンジニアから、初動として、ダンプをご提供くださいとお願いすることも多々ありますが、以下で紹介する調査手法は、より深い解析に進む前にざっくりとした状況を捉える作業としても実施している内容になりますので、ご参考になればと思います。

     

    プロセス ダンプを採取してみましょう

    それでは、実際の流れに沿って操作してみます。

     

    1. サイトを開こうとしたら、Internet Explorer が応答なしになってしまった…

     

     

    1. ダンプを取るため、タスク マネージャーを起動しましょう。

     

     

    1. 存在するすべての iexplore.exe についてダンプをひとつずつ採取しましょう。(対象プロセスを右クリックして [ダンプ ファイルの作成] を選択)

     

     

    1. ダンプの保存先が表示されるのでメモしておきます。

     

     

    この例では 2 つの iexplore.exe が存在したので、同じ操作を 2 回実施してふたつのダンプを取得しました。

     

    Debug Diagnostic Tool (DebugDiag) をインストールしましょう

    ダンプ ファイルの解析をおこなうためのツール「Debug Diagnostic Tool」を以下からダウンロードし、インストールします。

    (インストールする PC は問題が発生していない PC も含め任意のところで構いません。)

     

    Debug Diagnostic Tool v2 Update 2
    https://www.microsoft.com/en-us/download/details.aspx?id=49924

     

    インストーラーを実行し画面を操作してツールをインストールします。基本的には Next をクリックしていけば OK です。インストールが完了するとスタート メニューに登録されます。

     

     

    DebugDiag でダンプを解析しましょう

    1. スタート メニューから "DebugDiag 2 Analysis" を起動します。

     

    1. 起動したら [CrashHangAnalysis] のチェックをオンにし、[Add Data Files] ボタンをクリックして解析対象のダンプ ファイルを選択します。今回はふたつのファイルを取得したので両方を解析対象に指定します。

     

     

    1. [Start Analysis] ボタンをクリックししばらく待ちます。

     

     

    1. 解析が完了すると、.mht ファイルを表示するためにブラウザーが起動します。

     

     

    解析結果をみてみましょう

    今回の例では、上記のレポート内容のとおり、デッドロックが検出されました。デッドロックとは、複数のプロセス (またはスレッド) が互いに相手の占有している資源 (リソース) の解放を待ってしまって、それ以上処理が進まなくなってしまう状態を指します。

    具体的には、次の 2 つの待ち状態が発生してしまっていることがわかりました。

     

    1. A) スレッド41 は bcrypt!g_csLoaderLock というリソースを使用中で、処理を進めるためにスレッド No.31 が使用中の ntdll!LdrpLoaderLock というリソースが解放されるのを待っている。
    2. B) スレッド31 は ntdll!LdrpLoaderLock というリソースを使用中で、処理を進めるためにスレッド No.41 が使用中の bcrypt!g_csLoaderLock というリソースが解放されるのを待っている。

     

    次のステップは、DebugDiag の解析レポートで出てきたキーワード「bcrypt!g_csLoaderLock」や「ntdll!LdrpLoaderLock」を検索サイトで調べて、既知の問題などがなかったかを確認することになります。

    もちろん、この例のようにはっきりとエラーとして検出されない場合もありますし、ツールによる自動解析のポイントが直接的な問題のポイントではない場合もあります。また、インターネット上の情報から該当する問題の解決策が導き出せるか否かはその事象に依存しますが、調査を行うべき対象の製品についてのヒントをえられる可能性はあります。弊社製品に関連する事象に見受けられる場合には、ここまでご確認いただいた内容をもって弊社サポートにお問い合せをいただくことで、状況やご契約などに応じた範囲で専門のエンジニアが問題解決の支援をさせていただくこともできます。

     

    ここでネタばらしになりますが、実は、今回の例として扱った事象は、弊社サポート技術文書番号 KB3092627 で説明する、修正済みの不具合に該当しているものでした。

     

    セキュリティ更新プログラム 3076895 のインストール後に Windows または アプリケーションがフリーズする問題を解決するための 2015 年 9 月付けの更新
    https://support.microsoft.com/ja-jp/help/3092627/september-2015-update-to-fix-windows-or-application-freezes-after-you

     

    「bcrypt!g_csLoaderLock」や「ntdll!LdrpLoaderLock」を検索サイトで調べると、上記の公開情報にたどり着けるかと思います。

    この段階で、公開情報に沿って、問題を修正するための更新プログラムをダウンロードしてインストールすることで現象が改善されることをご確認いただけるものですが、ここではもう少しだけ踏み込んで、DebugDiag のレポートに出力されたコール スタックの内容も確認してみたいと思います。

     

    以下は、先ほどのレポートにおけるスレッド No.31 の部分を抜粋したものです。

     

     

    公開情報 (KB3092627) にはここまで詳細な内容はお伝えしていないのですが、もし、お手元で取得したダンプを解析した結果、上記の内容と同じレポートが得られたら、ほぼ間違いなく KB3092627 で説明する現象であり、更新プログラムをダウンロードして適用いただくことが解決策になります。

    本例に沿った事象ではない場合もあろうかと思いますが、ご参考になればと思います。

     

     

    今回のお話はここまでとなりますが、いかがでしたでしょうか。私たちサポート エンジニアが日々お客様のお困りごとの解決支援を進めていく過程のほんの一部の内容とはなりますが、いろいろな場面で使える調査手法ですので、ぜひお手元でもお試しいただければと思います。


    2018年12月11日 5:29