(57)【要約】【課題】  コンピュータプログラムの無応答部分を識別すること。【解決手段】  本発明の方法によれば、潜在的に無応答行動を生じる可能性のあるプログラムコードがタイマーにラップされる。タイマーは、プログラムコードのセクションの実行の初めに、バックグランドスレッド上で開始される。タイマーは、指定の閾値時間が経過した後、満了するようにセットされる。プログラムコードのセクションの実行の間に、タイマーが満了するかどうかについて判定がなされる。プログラムコードのセクションの実行の間に、タイマーが満了する場合、実行が中断されて、プログラムコードのセクションが無応答と識別され、コンピュータプログラムの診断および無応答の振る舞いの修復での使用のためにシステム状態の情報が格納される。格納される実際のシステム状態の情報は、リモート制御ファイルにより定義され、タイマー満了の時またはその前後に格納することができる。【選択図】  図２
2006107430.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムの無応答部分を識別するための方法であって、
コンピュータプログラムのセクションの実行の初めにタイマーをスタートさせることと、
前記コンピュータプログラムのセクションの実行中に前記タイマーが満了するかどうかを判定することと、
前記コンピュータプログラムのセクションの実行中に前記タイマーが満了することに応答して、前記コンピュータプログラムのセクションを無応答と識別し、前記コンピュータプログラムの診断での使用のためにシステム状態情報を格納することと
を備えることを特徴とする方法。
【請求項２】
前記システム状態情報は、前記タイマーが満了する時またはその前後に格納されることを特徴とする請求項１に記載の方法。
【請求項３】
前記コンピュータプログラムのセクションを無応答と識別し、システム状態情報を格納することに先立って、
前記コンピュータプログラムのセクションを実行するのに費やされた時間量が、タイマーに関連付けられた閾値より小さいかどうかを判定することと、
前記コンピュータプログラムのセクションを実行するのに費やされた時間量が閾値より小さいと判定することに応答して、閾値からコンピュータプログラムを実行するのに費やされた時間量を差し引いた量に等しい時間量の満了の後に満了するように前記タイマーをリセットすることと
をさらに備えることを特徴とする請求項２に記載の方法。
【請求項４】
前記コンピュータプログラムのセクションを無応答と識別し、システム状態情報を格納することに先立って、
前記コンピュータプログラムのセクションの実行中にモーダルダイアログボックスが表示されたかどうかを判定することと、
前記モーダルダイアログボックスが表示されたと判定することに応答して、閾値からモーダルダイアログボックスが表示された時間量を差し引いた量に等しい時間量の満了の後に満了するように前記タイマーをリセットすること
をさらに備えることを特徴とする請求項２に記載の方法。
【請求項５】
前記タイマーは、１つまたは複数の親タイマーを有し、前記方法は、コンピュータプログラムのセクションの実行中に前記タイマーが満了したと判定することに応答して、前記親タイマーに満了について通知することをさらに備えることを特徴とする請求項２に記載の方法。
【請求項６】
前記タイマーは、１つまたは複数の子タイマーを有し、前記方法は、コンピュータプログラムのセクションの実行中に前記タイマーが満了したと判定することに応答して、前記子タイマーに満了について通知することをさらに備えることを特徴とする請求項５に記載の方法。
【請求項７】
前記タイマーを、限定数のタイマーを割当てるように認可されたタイマープールから得ることをさらに備えることを特徴とする請求項６に記載の方法。
【請求項８】
コンピュータプログラムの診断での使用のために格納される前記システム状態情報は、リモート制御ファイルの内容に基づくことを特徴とする請求項１に記載の方法。
【請求項９】
前記リモート制御ファイルは、最小限のデータ収集を行うべきかまたは完全なメモリダンプを行うべきかを定義することを特徴とする請求項８に記載の方法。
【請求項１０】
コンピュータプログラムの無応答部分を識別するための方法であって、
アサートタイマーコンストラクタを、応答性についてテストされるべきコンピュータプログラムの部分の前に挿入することと、
アサートタイマーデストラクタを、応答性についてテストされるべき前記コンピュータプログラムの部分に続いて挿入することと、
前記コンストラクタを実行してタイマーを得ることと、
前記タイマーをインスタンス化することと、
応答性についてテストされるべき前記コンピュータプログラムの部分の実行を始めることと、
前記コンピュータプログラムの部分の実行の完了に先立って、前記タイマーが満了したかどうかを判定することと、
前記デストラクタを実行して、前記タイマーを解放することと、
前記コンピュータプログラムの部分の実行の完了に先立って、前記タイマーが満了したと判定することに応答して、前記コンピュータプログラムのセクションを無応答と識別し、前記コンピュータプログラムの診断での使用のためにシステム状態情報を格納することと
を備えることを特徴とする方法。
【請求項１１】
前記システム状態情報は、前記タイマーが満了する時またはその前後に格納されることを特徴とする請求項１０に記載の方法。
【請求項１２】
前記タイマーが満了しなかったと判定することに応答して、前記デストラクタを実行して前記タイマーを解放し、前記コンピュータプログラムの実行を継続することをさらに備えることを特徴とする請求項１０に記載の方法。
【請求項１３】
前記コンストラクタを実行してタイマーを得ることに先立って、限定数のタイマーを割当てるように認可されたタイマープールを初期化し、前記プールから割当てられたタイマーが満了したかどうかを監視し、タイマーが満了したと判定することに応答して満了ルーチンを呼出すためにアサートタイマースレッドをスタートさせることをさらに備えることを特徴とする請求項１０に記載の方法。
【請求項１４】
タイマーを得ることは、前記イベントタイマープールからタイマーを得ることを備えることを特徴とする請求項１３に記載の方法。
【請求項１５】
前記コンピュータプログラムのセクションを無応答と識別し、システム状態情報を格納することに先立って、
前記コンピュータプログラムのセクションを実行するのに費やされた時間量が、前記タイマーに関連付けられた閾値より小さいかどうかを判定することと、
前記コンピュータプログラムのセクションを実行するのに費やされた時間量が、閾値より小さいと判定することに応答して、閾値からコンピュータプログラム実行に費やされた時間量を差し引いた量に等しい時間量の満了の後に満了するように前記タイマーをリセットすることをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１６】
前記タイマーは、１つまたは複数の親バックグランドタイマーを有し、前記方法は、前記コンピュータプログラムのセクションの実行中にタイマーが満了したと判定することに応答して、前記親タイマーに満了について通知することをさらに備えることを特徴とする請求項１５に記載の方法。
【請求項１７】
前記タイマーは、１つまたは複数の子タイマーを有し、前記方法は、前記コンピュータプログラムのセクションの実行中にタイマーが満了したと判定することに応答して、前記子タイマーに満了について通知することをさらに備えることを特徴とする請求項１６に記載の方法。
【請求項１８】
コンピュータ実行可能命令を格納したコンピュータ読取可能媒体であって、コンピュータによって実行されると、
限定数の待機可能タイマーを割当てるように動作するアサートタイマープールを初期化することと、
１つまたは複数のアサートタイマーの動作をバックグランドスレッド上で監視し、アサートタイマーが満了したと判定することに応答して、アサートタイマー満了ルーチンを呼出すように動作するアサートタイマースレッドを初期化することと、
アサートタイマーコンストラクタを呼出して、前記アサートタイマープールからアサートタイマーを得て、前記アサートタイマーをリセットしてアサートタイマーの実行を開始することと、
前記コンピュータプログラム内のプログラムコードを実行することと、
前記アサートタイマースレッドにより、前記アサートタイマーが前記プログラムコードの実行中に満了したかどうかを判定することと、
前記アサートタイマーが前記プログラムコードの実行中に満了したと判定することに応答して、前記アサートタイマー満了ルーチンを呼出すことと
を前記コンピュータにさせることを特徴とするコンピュータ読取可能媒体。
【請求項１９】
前記アサートタイマー満了ルーチンの実行は、
前記プログラムコードの実行に費やされた時間量が、アサートタイマーに関連付けられた閾値より小さいかどうかを判定することと、
前記プログラムコードの実行に費やされた時間量が、閾値より小さいと判定することに応答して、閾値から前記プログラムコードの実行に費やされた時間量を差し引いた量に等しい時間量の満了の後に満了するように前記アサートタイマーをリセットすることを備えたことを特徴とする請求項１８に記載のコンピュータ読取可能媒体。
【請求項２０】
前記アサートタイマー満了ルーチンの実行は、
前記プログラムコード実行中に費やされた時間量が、閾値より小さくないと判定することに応答して、前記プログラムコードを無応答であると識別し、前記コンピュータプログラムの診断での使用のためにシステム状態情報を格納することをさらに備えたことを特徴とする請求項１９に記載のコンピュータ読取可能媒体。
【請求項２１】
前記アサートタイマー満了ルーチンの実行は、割当られたアサートタイマーを前記アサートタイマープールに戻すことをさらに備えたことを特徴とする請求項２０に記載のコンピュータ読取可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラムの無応答部分を識別することに関する。
【背景技術】
【０００２】
ソフトウエア開発サイクルで最も重要な段階の１つは、ソフトウエア製品が顧客に出荷された後に生じるデバッグの段階である。この段階が重要なのは、プログラムエラーを分離し、頻繁に使用される機能と希にしか使用されない機能を識別し、ソフトウエア製品を概ね改良し、安定させるために、ソフトウエア製品に関する顧客の実体験がこの段階の間に利用できるからである。
【０００３】
リリース後のデバッグ段階における解析の主な重点は、典型的に、最も頻繁に発生するプログラムエラー（「バグ」とも言う）を識別することである。最も頻繁に発生するバグを識別してそれを修復することにより、多数のユーザの使用感が改善される。しかし、以前のリリース後のデバッグシステムでは、一般に取り組まれていなかった解析の別のカテゴリがある。このカテゴリは、コンピュータの「ハング（ｈｕｎｇ）」の識別に関する。ハングは、ソフトウエアがユーザのソフトウエア入力に対する応答をやめ、表示画面の再ドローをやめる時間帯である。
【０００４】
ハングしたコンピュータプログラムは実行し続けるが、そのプログラムは典型的に、ユーザに対して無応答となる。というのは、入力が受取られず、ディスプレーが更新されないからである。これは、ユーザにとって極めてフラストレーションのたまる状態である。というのは、プログラムに回復不能の致命的なエラーが起こったのか、あるいはコンピュータはその処理を完了して再び入力を受け取り表示画面を更新するのかがユーザには不明確であるからである。無応答の期間が拡大すると、ユーザは、コンピュータプログラムが何か致命的なエラーに遭遇したと考え、プログラムを終了することを選ぶことがある。このようなやり方でハングしたプログラムを終了すると、結果としてデータの喪失および不安定なシステム状態を生じる可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
コンピュータプログラムの無応答の振る舞いが生じる部分を識別できれば、いくつかのステップのいずれか１つを行って、プログラムコードの応答性を改善することができる。例えば、無応答部分を書き直して、その処理を非同期的に行うか、バックグラウンドの処理スレッド上で行うことができる。あるいは、無応答性がプログラムの主メッセージループ上で処理を行うことにより生じている場合は、その処理をメッセージループの外に移動することができる。無応答の振る舞いを生じるコンピュータプログラムの部分が識別されると、プログラムに対する他の種類の変更を行ってコンピュータプログラムの応答性を改善することができる。このように、コンピュータプログラムの無応答部分を識別するための方法、システムおよび装置が必要である。また、このような性能の問題を実際のユーザが遭遇するように監視する必要性と、アプリケーション性能またはユーザ体験を劣化しないように監視する必要性がある。
【０００６】
本発明の各種実施例は、こうした考慮事項およびその他に関してなされたものである。
【課題を解決するための手段】
【０００７】
本発明の一実施例によれば、コンピュータプログラムの無応答部分を識別するための方法および装置により、上述およびその他の課題が解決される。コンピュータプログラムの無応答部分を識別することにより、プログラムに対し変更を加えて、その結果、無応答プログラム状態が少なくなり、それによりそのコンピュータプログラムでの顧客満足度を増大することができる。
【０００８】
本発明の一態様によれば、コンピュータプログラムの無応答部分を識別する方法が提供される。その方法によれば、無応答の振る舞いを潜在的に生じる可能性のあるプログラムコードは、タイマーでラップされる。詳細には、プログラムコードのあるセクションの実行の開始時にタイマーをスタートさせる。タイマーは規定の閾値時間が満了した後、満了するようにセットされる。タイマーがプログラムコードのそのセクションの実行中に満了するとタイマーにより呼出されるバックグランドスレッドが実行される。
【０００９】
タイマーがプログラムコードのそのセクションの実行中に満了する場合、実行が中断され、そのイベントについてのデータが収集される。詳細には、プログラムコードのそのセクションが無応答であると識別され、コンピュータプログラムの診断とその無応答の振る舞いを修復するのに使用するために、システム状態の情報が格納される。そのプログラムセクションが実行を完了するときではなく、タイマーが満了したときのシステム状態をキャプチャするために、タイマーが満了する時またはその前後でシステム状態の情報が格納される。少量のデータを頻繁に収集することができ、ある特定の性能の問題によりさらなる調査が必要とされるときは、より多くの情報を収集することができる。
【００１０】
本発明の一態様により、タイマーの満了が、別の原因ではなく、実際にプログラムコードのセクションが閾値時間内での実行に失敗したことにより生じていることを確実にするために、処理を実行することができる。例えば、プログラムコードのセクションが、メインメモリからバッキングストアにスワップされる場合、プログラムコードのセクションが閾値期間の時間だけ実行していなかったとしても、タイマーは満了することがある。同様に、モーダルダイアログボックスが存在すると、コードのセクションが実行されず、タイマーが満了することがある。これらの状態によりタイマーの満了が生じるのを防止するために、コンピュータプログラムを実行するのに実際に費やした時間の量が、タイマーに関連付けられた閾値より小さいか判定する。実行時間が閾値より小さければ、タイマーは、タイマーの閾値からプログラムコードのセクションを実行するのに実際に費やした時間量を差し引いた量に等しい時間量にリセットすることができる。そしてプログラムコードのセクションの実行が再開される。
【００１１】
本発明の他の態様によれば、タイマーはネストした様式でプログラムコードのセクションに挿入することができる。このようにして、タイマーは、親タイマーまたは子タイマーを有することがある。１つのタイマーの満了により、その親タイマーまたは子タイマーの満了をも生じさせるのを防止するために、一実施例において、各タイマーは、満了した時をその親タイマーまたは子タイマーに通知して、親タイマーまたは子タイマーの誤った満了が生じないようにすることができる。さらに具体的には、子タイマーは、親タイマーに子タイマーが掛けた時間を通知して、親タイマーがその時間を親タイマーが掛けた時間の総量から引くことができるようにする。例えば、親タイマーが、処理するのに５秒掛ける子タイマーを１つ有し、親タイマーは全体で１０秒掛けるとすると、２つのアラートが生成されることになる。１つのアラートは、子タイマーについて５秒のときに発生されることなる。もう１つのアラートは、親タイマーについて発生されることになり、これは親タイマーが子タイマーが掛けた時間を差し引いた後でも５秒掛かったからである。逆に、親タイマーが全体で５．５秒しか掛からなかったのであれば、アラートは子タイマーについてのみ発生され、親タイマーについては発生されないであろう（１秒のタイマー閾値を仮定した場合）。
【００１２】
本発明の別の態様によれば、限定数のタイマーを割当てるように動作するタイマープールを使用することができる。十分なレベルの性能を維持するために、タイマープールは、タイマーを割当てる要求に応答し、タイマーがプールの中にあるときのみタイマーの割当てを可能にする。タイマーがプールの中で利用可能でなければ、タイマーは割当てられないことになる。タイマーの使用が完了すると、タイマーはプールに返すことができる。
【００１３】
本発明を特徴付けるこれらおよびその他の特性並びに利点は、以下の詳細な説明を読み、関連の図面を検討することにより明らかとなろう。
【発明を実施するための最良の形態】
【００１４】
ここで図面を参照して、本発明の各種態様を説明する。図面において、類似の番号は類似の要素を表す。詳細には、図１およびそれに対応する検討は、本発明の実施例を実装することができる適したコンピューティング環境の簡単で一般的な説明を提供することを意図したものである。本発明は、パーソナルコンピュータのオペレーティングシステム上で稼働するプログラムモジュールと共に実行する一般的な関連で説明されることになるが、当業者は、本発明が他のタイプのコンピュータシステムおよびプログラムモジュールと組合せて実装できることを認めるであろう。
【００１５】
一般的に、プログラムモジュールには、ルーチン、プログラム、コンポーネント、データ構造、および、特定のタスクを実行するか、特定の抽象データ型を実装するその他のタイプの構造が含まれる。さらに、当業者は、本発明が、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な民生電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成で実施され得ることを理解するであろう。また、本発明は、通信ネットワークを通じてリンクされたリモート処理デバイスによりタスクを実行する分散コンピューティング環境においても、実施することができる。分散コンピューティング環境では、プログラムモジュールは、ローカルおよびリモートの両メモリ記憶デバイスに置くことができる。ここで図面を参照して、本発明の態様および例示的運用環境を説明する。図面では、いくつかの図面を通じて類似の番号は類似の要素を表す。
【００１６】
図１は、本発明の各種実施例のための動作環境を示す。図１に示すように、クライアントコンピュータ２は、本発明の各種実施例で使用される。クライアントコンピュータは、１つまたは複数のプログラムモジュールを実行するのに使用することができる標準的なデスクトップコンピュータまたはサーバコンピュータを備える。クライアントコンピュータ２は、クライアントコンピュータで実行中のアプリケーションプログラムの性能を監視するためと、アプリケーションプログラムの応答性を判定するためのプログラムモジュールをも装備している。以下に詳細をより詳しく説明するように、クライアントコンピュータ２は、アプリケーションプログラムが無応答になるアプリケーションコードの部分を識別するためのコードを実行するよう動作する。無応答コンピュータプログラムは、処理の実行中にユーザ入力を受取らないか、または表示画面を更新しないプログラムを包含する。
【００１７】
無応答であるプログラムを識別し、無応答の振る舞いを修復するために、クライアントコンピュータ２は、エラー報告サーバ（「ＥＲＳ」）コンピュータ１０とインターフェースすることができる。エラー報告サーバコンピュータ１０は、ＬＡＮ４またはインターネット８を通じて維持されアクセス可能な従来のサーバコンピュータを備える。ＥＲＳ１０は、典型的に、応答性について監視するためにアプリケーションソフトウエアの開発者によって運用される。クライアントコンピュータ１０は、プログラムが無応答コードを含むと識別されたときか、または他のタイプのエラー状態に遭遇したときに、エラーをＥＲＳ１０に報告するように動作することができる。ＥＲＳ１０に報告された情報を通じて、開発者はプログラムコードを修正して、無応答プログラム状態を除去するか、またはプログラムの別の不備を訂正することができる。修正されたプログラムコードは、将来の更新でエンドユーザに送信することができる。
【００１８】
無応答であるプログラムコードの識別を援助するために、クライアントコンピュータ２は、定期的にＥＲＳ１０からリモート制御ファイルを受取る。リモート制御ファイルは、不具合を記録すべき条件を定義する情報を含む。詳細には、リモート制御ファイルは、プログラムが無応答であるかどうかを判定するための時間閾値を含むことができる。リモート制御ファイルは、プログラムの一部が無応答であると識別されるときシステム情報が収集されるべきか、そして収集されるべき情報の種類についての情報を含むこともできる。リモート制御ファイルの内容および使用法に関する追加の詳細は下記で提供されるであろう。
【００１９】
ここで図２を参照して、クライアントコンピュータ２について例示的なコンピュータアーキテクチャを説明することができる。図２に示すコンピュータアーキテクチャは、従来のデスクトップまたはラップトップコンピュータを示し、中央演算処理装置５（「ＣＰＵ」）、ランダムアクセスメモリ９（「ＲＡＭ」）および読み出し専用メモリ（［ＲＯＭ］）１１を含むシステムメモリ７、およびメモリをＣＰＵ５に結合するシステムバス１２を含む。起動中などに、コンピュータ内の要素間で情報を伝送するのを助ける基本的なルーチンが入った基本入力／出力システムはＲＯＭ１１に格納されている。コンピュータ２はさらに、オペレーティングシステム１６、アプリケーションプログラム１８、およびその他のプログラムモジュールを格納するための大容量記憶装置１４を含み、これらについては下記に詳細を記述する。
【００２０】
大容量記憶装置１４は、バス１２に接続される大容量記憶コントローラ（図示せず）を通じてＣＰＵ５に接続される。大容量記憶装置１４およびそれに関連するコンピュータ読取可能媒体は、コンピュータ２の不揮発性ストレージを提供する。ここに含まれたコンピュータ読取可能媒体の記述は、ハードディスクドライブまたはＣＤ−ＲＯＭドライブなどの大容量記憶装置を指すが、当業者であれば、コンピュータ読取可能媒体は、コンピュータ２によってアクセスすることのできる任意の利用可能な媒体とすることができることを理解するであろう。
【００２１】
一例として、限定ではなく、コンピュータ読取可能媒体は、コンピュータ記憶媒体および通信媒体を備えてもよい。コンピュータ記憶媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュールまたはその他のデータなどの情報の格納のために任意の方法または技術で実装された揮発性および不揮発性の媒体、リムーバブルおよび非リムーバブルの媒体を含む。コンピュータ記憶媒体には、これに限定されないが、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくはその他の固体メモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（「ＤＶＤ」）もしくは他の光記憶、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくはその他の磁気記憶装置、または所望の情報を格納するため使用することができ、コンピュータ２によってアクセスすることのできる他の任意の媒体が含まれる。
【００２２】
本発明の各種実施例によれば、コンピュータ２は、インターネットなどのネットワーク８を通じて、リモートコンピュータに対する論理接続を用いてネットワーク化された環境で動作することができる。クライアントコンピュータ２は、バス１２に接続されたネットワークインターフェースユニット２０を介して、ネットワーク８に接続することができる。ネットワークインターフェースユニット２０は、その他の種類のネットワークおよびリモートコンピュータシステムへ接続するのに使用できることが理解される筈である。また、コンピュータ２は、キーボード、マウスまたは電子スタイラス（図１には図示せず）を含むいくつかの他の装置から入力を受取り、処理するため入出力制御装置２２を含むこともできる。同様に、入出力制御装置２２は、表示画面、プリンタ、またはその他の種類の出力装置に出力を提供することもできる。
【００２３】
上に簡単に記述したように、いくつかのプログラムモジュールおよびデータファイルをコンピュータ２の大容量記憶装置１４およびＲＡＭ９に格納することができ、それらには、ワシントン州レドモンドのマイクロソフト社のオペレーティングシステムＷＩＮＤＯＷＳ（登録商標）  ＸＰなど、ネットワーク化されたパーソナルコンピュータの動作の制御に適したオペレーティングシステム１６が含まれる。また、大容量記憶装置１４およびＲＡＭ９は、１つまたは複数のプログラムモジュールを格納することもできる。詳細には、大容量記憶装置１４およびＲＡＭ９は、１つまたは複数のアプリケーションプログラム１８を格納するもできる。大容量記憶装置１４およびＲＡＭ９はまた、アプリケーション性能モニタアプリケーションプログラム２４を格納することもできる。ここでさらに詳細に記述するように、アプリケーション性能モニタ２４は、アプリケーションプログラムの動作を監視し、そのアプリケーションプログラムの部分が無応答であるかどうかを判定するよう動作する。アプリケーションプログラムが無応答であれば、アプリケーション性能モニタ２４はさらに、無応答の振る舞いを診断し、修復するためのシステム状態の情報を格納するように動作する。システム状態の情報は、このアプリケーションプログラムの開発者による使用のためにＥＲＳ１０へ送信することができる。
【００２４】
また、大容量記憶装置１４およびＲＡＭ９は、リモート制御ファイル２６を格納することもできる。リモート制御ファイル３６の内容を定期的に更新し、ＥＲＳ１０からクライアントコンピュータ２に対して送信することもできる。上に簡単に記述したように、リモート制御ファイル３６は、不具合が記録されるべき条件を定義するデータを格納することもできる。詳細には、リモート制御ファイルは、プログラムが無応答であるかを判定するための時間閾値を含むこともできる。また、リモート制御ファイルは、プログラムのある部分が無応答であると識別するときにシステム情報を収集すべきかどうかについての情報と、収集すべき情報の種類に関する情報を含むこともできる。リモート制御ファイル３６は他のデータを格納することもでき、また、クライアントコンピュータ２の動作を別の方法で制御するのに使用することができることを理解されたい。リモート制御ファイルの内容および使用に関するさらなる情報は、「コンピュータシステム内で発生するイベントの報告をリモート制御するための方法およびシステム（Method and System for Remotely Controlling the Reporting of Events Occurring within a Computer System）」と題され、参照によってここに組込まれる同時係属の米国特許出願番号１０／３０４，２８２号に見出すことができる。アプリケーション性能モニタ２４の動作に関する追加の詳細は、図３−５に関して以下に提供されることになろう。
【００２５】
ここで図３を参照して、アサートタイマーをコンピュータプログラムの各種セクションに付加するためのプロセスを示すプログラムコードダイアグラムについて説明する。図３に示すように、コンピュータプログラムのセクション４０は、プログラムコードの各種セクションを備えることができる。例えば、図３に示すように、セクション４０は、プログラムコードセクション４６Ａ−４６Ｄから構成されている。これらのセクションは、各種のルーチン、サブルーチン、ファンクション、スレッド、プロセスまたはプログラムコードの任意の部分を備えることができる。
【００２６】
プログラムコードの各種セクションの応答性を判定するために、タイマー（ここでは「アサートタイマー」とも呼ぶ）を作成し、処分するための追加のプログラムコードが、プログラムコードに挿入される。例えば、図３に示すように、アサートタイマーコンストラクタ４８Ａが、プログラムコードに挿入されている。コンストラクタ４８Ａはタイマーを作成し、スタートさせる。下記に詳述するように、バックグラウンドプロセスが、タイマーを監視し、タイマーに関連付けられた時間の閾値が満了したかどうかを判定する。プログラムコードの実行によりコンストラクタ４８Ａに関連付けられたアサートタイマーデストラクタ５０Ａに達する前にタイマーが満了する場合、バックグランドスレッドがタイマー満了をキャプチャし、システム状態の情報を収集して、タイマーが満了する前にプログラムコードが実行を終了しなかった理由を判定するのを助けることができる。プログラムコードの実行が、タイマーの満了前にデストラクタ５０Ａに達する場合は、デストラクタ５０Ａはタイマーを解放する。
【００２７】
図３に示すように、タイマーは、ネストした方法でプログラムのセクションに挿入することができる。例えば、図３に示すように、第１タイマーは、コンストラクタ４８Ａとデストラクタ５０Ｂの使用を通じてプログラムコードのセクション４４の辺りに配置されている。第２タイマーは、コンストラクタ４８Ｂとデストラクタ５０Ａの使用を通じてプログラムコードのセクション４２の辺りに配置されている。第１タイマーは、第２タイマーを完全に包含しているので、第１タイマーは第２タイマーの「親」タイマーと考えることができる。同様に、第２タイマーは、第１タイマーの「子」タイマーと考えることができる。下記に詳述するように、１つのタイマーの満了により親または子のタイマーの満了をも引き起こすことから守るために、各タイマーは、満了した時にその親タイマーまたは子タイマーに通知するように動作することができる。満了したタイマーは、閾値を超えて費やした時間量についての指示を提供することができる。通知されたタイマーは、それで、親タイマーまたは子のタイマーの満了の結果、偽の満了が生じないように、その時間量をその閾値から差し引くことができる。
【００２８】
ここで図４を参照して、コンピュータプログラムの無応答部分を識別するために実行されるプロセスを示す例示的なルーチン４００を説明する。ここに提示したルーチンの説明を読む場合に、本発明の各種実施例の論理動作は、（１）コンピュータシステム上で走る一連のコンピュータ実装のアクトまたはプログラムモジュールとして、そして／または（２）コンピュータシステム内の相互接続されたマシン論理回路または回路モジュールとして、実施されることを理解されたい。実装は、本発明を実施するコンピューティングシステムの性能要件に依存した選択の問題である。したがって、図４−５に示す論理動作、およびここに記述した本発明の実施例の構成は、操作、構造デバイス、アクトまたはモジュールとして様々に呼ばれる。当業者であれば、これらの操作、構造デバイス、アクトまたはモジュールは、ソフトウエア、ファームウエア、特別な目的のデジタルロジック、およびそれらの任意の組合せで、ここに記載の請求項に列挙した本発明の精神と範囲から逸脱することなく、実施できることを認識するであろう。
【００２９】
ルーチン４００は、オペレーション４２０で開始し、いくつかの初期化ステップが行われる。詳細には、オペレーション４２２において、アサートタイマーバックグランドスレッドが作成される。アサートバックグランドスレッドは、タイマーの満了を捕捉し、タイマーの満了に応答して一定の処理を行うように動作する。このように、アサートタイマーバックグランドスレッドは、オペレーション４２８において初期化され、次いでオペレーション４３０において待機を開始する。タイマーが満了すると、アサートタイマーバックグランドスレッドはオペレーション４３２に継続し、ここでタイマーの満了が処理される。タイマーの満了を処理するための例示的なプロセス５００は、図５との関連で下記に記述する。オペレーション４３４から、アサートタイマーバックグランドスレッドはオペレーション４３４に移動し、ここで待機ループが終了する。
【００３０】
アサートタイマープールもオペレーション４２４において開始される。アサートタイマープール２８（「プール」）は、限定数のタイマー３０Ａ−３０Ｈの１つを呼出オブジェクトに割当てるように認可されるオブジェクトを備える。タイマーがプールの中で利用可能な場合は、それが呼出オブジェクトに割当てられる。利用可能なタイマーがない場合は、割当てられないことになる。限定数のタイマーを割当てることにより、多数のタイマーの同時割当てについて考えられうる性能の影響を低減することができる。タイマーの構築に際してタイマーがプールから割当てられ、タイマーの処分に際してプールに戻されることを理解されたい。
【００３１】
無応答性について監視されており、タイマーと共にコード化されたプログラムの実行を、オペレーション４０２−４１８に示す。詳細には、オペレーション４０２において、アサートタイマーのためのコンストラクタに遭遇し、実行される。タイマーを構成するために、いくつかのパラメータを渡すことができる。詳細には、アサートタグ識別子を渡すことができ、これは特定のタイマーを一義的に識別する。タイマー型パラメータも渡すことができ、これはタイマーのために行うタイミングの型、およびそのタイマーに関連付けられたデフォルトの閾値時間を判定する。詳細には、プロセスの実行時間に対して計時するプロセスタイミングを指定することができる。あるいは、呼出スレッドの実行時間に対して計時するスレッドタイミングを指定することもできる。
【００３２】
タイマーが構築され次第、ルーチン４００はオペレーション４０４へと続き、ここで追加の呼出を行ってタイマー方法をリセットして、稼動中のアサートタイマーオブジェクトに実際に戻す。稼動中のアサートタイマーオブジェクトは、リモート制御ファイルをチェックして、オペレーション４３６において異なる閾値を使用すべきかどうかを判定する。実行の間、稼動中のアサートタイマーオブジェクトは、デストラクタが呼出され、処理される前に閾値時間が遅らされる場合、アラートとともにアサートタイマーバックグランドを呼出すように動作する。このプロセスをオペレーション４４０に示す。
【００３３】
オペレーション４０４においてタイマーが稼動し始めると、ルーチン４０４はオペレーション４０６へと続き、ここで応答性についてテストされるべきプログラムコードのセクションが実行される。オペレーション４０６で、計時コード部分の実行の完了に先立って、タイマーが満了する場合、タイマーはアサートタイマーバックグランドスレッドを呼出し、図５に関連して下記に記述する処理が発せられる。そうでなければ、ルーチン４００はオペレーション４０８へと続き、ここでデストラクタ３２が処理される。詳細には、オペレーション４０８で、タイマーが解放されアサートタイマープール２８に戻される。
【００３４】
オペレーション４０８から、ルーチン４００はオペレーション４１０に続き、ここでタイマーが閾値時間に達したことを示すアラートをすでに発したかについて判定が行われる。アラートがすでに発せられているのであれば、ルーチン４００はオペレーション４１６に分岐し、ここでアサートがデバッグモードで発せられる。これは典型的に、条件の発生をアプリケーションの開発者に通知するので、彼らのためにのみ発生される。
【００３５】
オペレーション４１０において、アラートは発せられていないと判定される場合、ルーチン４００はオペレーション４１２へと続き、ここでタイマーが満了したかどうかについての判定がなされる。タイマーが満了したのであれば、ルーチン４００は、オペレーション４１８に分岐し、ここでルーチンが終了し、アプリケーションプログラムの実行が継続する。オペレーション４１２で、タイマーが満了したと判定されるのであれば、ルーチン４００は、オペレーション４１４へと続き、ここでアサートタイマーの満了が、図５に関して下記で記述する方法で処理される。この条件は、例えば、タイマーは満了したが、バックグランドスレッドはまだタイマーの満了を処理する機会を得ていない場合に生じる。この場合、デストラクタは、図５に関して下記に説明する満了したタイマーを取扱うためのプロセスを開始する。オペレーション４１４から、ルーチン４００はオペレーション４１６へと続き、ここで上述のようにアサートがデバッグモードで発せられる。ルーチン４００は、次いでオペレーション４１８へと続き、ここでルーチンは終了し、アプリケーションプログラムの実行が継続する。
【００３６】
ここで図５を参照して、タイマーの満了を処理するための例示的なルーチン５００を説明する。ルーチン５００はオペレーション５０２で開始され、ここで、監視しているプログラムセクションの実際の実行時間が、タイマーに関連付けられた閾値より小さいかどうかについて判定がなされる。この計算は、タイマーの満了が、別の原因によるのではなく、プログラムコードのセクションが閾値時間内に実行を完了するのに失敗したことにより実際に生じたことを確実にするために行われる。例えば、プログラムコードのセクションが、メインメモリからバックアップストアにスワップされると、プログラムコードのセクションが閾値時間だけ実行しなかったとしても、タイマーは満了することがある。同様に、モーダルダイアログボックスの存在により、コードのセクションが実行されず、タイマーが満了する原因になることがある。これらの状況がタイマーの満了を生じるのを防止するために、コンピュータプログラムを実行するのに実際に費やされた時間量が、タイマーに関連付けられた閾値より小さいかどうかについて、オペレーション５０２において、判定がなされる。加えて、モーダルダイアログボックスがユーザに対し表示され、入力を待っているかどうかについて判定を行うことができる。モーダルダイアログボックスが存在する場合、ユーザがダイアログボックスを終了するのを待つのに費やした時間を、実行時間から差し引くことができる。これは、ダイアログボックスがコードの実行を妨げないが、ダイアログボックスが表示されている間、アプリケーションはユーザを待っており、ユーザを待っている間の実行時間は無視されるべきであるという事実のためである。
【００３７】
オペレーション５０２において、実行時間が閾値より大きいと判定される場合、ルーチン５００はオペレーション５０４に分岐する。オペレーション５０４で、タイマーに関連付けられたデストラクタが現在実行されているかどうかについて判定がなされる。デストラクタが現在実行されている場合、ルーチン５００はオペレーション５２０に分岐し、そこでタイマーはプール２８に返される。デストラクタが実行されていない場合、ルーチン５００はオペレーション５０６へと続き、そこでタイマーのための閾値が、タイマーの閾値からプログラムコードのセクションを実行するのに実際に費やされた時間量を差し引いた量に等しい時間量にリセットされる。次いで、オペレーション５０８において、プログラムコードのセクションの実行が再開される。
【００３８】
オペレーション５０２で、実行時間が閾値より小さいと判定される場合、ルーチン５００はオペレーション５１０に分岐し、ここで無応答状態を生じるプログラムコードの診断において役立てるためにメモリダンプが収集されるべきかどうかについて判定が行われる。ダンプが収集されるべきかどうか、またそうであれば、収集されるべきダンプの型はリモート制御ファイル２６の中で指定することができる。例えば、多くの場合に、タイマーが満了するとき、イベントのＩＤおよび非常に基本的なシステム情報など、少量の情報を収集するのみであることが望ましい。これにより、高い頻度で発生するイベントの迅速な判定が可能になる。イベントがさらなる調査を必要とするときは、リモート制御ファイル２６の内容を、特定の不具合については完全なメモリダンプを収集するように定義することができる。このようにして、軽量の報告と重量の報告との間での切替が非常に簡単になる。タイマーは、閾値時間を経過した後に直ちに満了するので、ダンプは、監視されているプログラムコードのセクションがその実行を完了したときではなく、満了の時またはその前後に収集されることを理解されたい。
【００３９】
ダンプが収集されない場合、ルーチン５００は、オペレーション５１２からオペレーション５１２に分岐する。ダンプが収集される場合、ルーチン５００はオペレーション５１２へと続き、そこでメモリダンプが収集される。ルーチン５００は次いでオペレーション５１４へと続き、リモート制御ファイル２６の内容を更新するのに使用される情報が更新される。オペレーション５１４から、ルーチンはオペレーション５１６へと続き、ここで、メモリダンプが収集されたことを示すフラッグがセットされる。
【００４０】
オペレーション５１６から、ルーチン５００はオペレーション５１８へと続き、ここで、満了したタイマーの親タイマーおよび子タイマーが、満了について上述の方法で通知される。次いで、ルーチンはオペレーション５２０へと続き、ここで、タイマーはアサートタイマープール２８に返される。ルーチン５００は次いでオペレーション５２２へと続き、ここで終了する。
【００４１】
以上に基づいて、本発明の各種実施例には、コンピュータプログラムの無応答部分を識別するための方法、システム、装置およびコンピュータ読取可能媒体が含まれることを理解されたい。上記の仕様、例およびデータは、本発明の構成の作成および使用について完全な記述を提供している。本発明の精神と範囲を逸脱することなく本発明の多くの実施例を実現することができるので、本発明は、ここに添付する特許請求の範囲に属する。
【図面の簡単な説明】
【００４２】
【図１】本発明の各種態様を具体化するために使用されるコンピュータネットワークの態様を示すネットワークの図である。
【図２】本発明の各種実施例で使用され、それらにより提供されるコンピュータシステムを示すコンピュータシステムアーキテクチャの図である。
【図３】本発明の実施例によるコンピュータプログラムの各種セクションにアサートタイマーを追加するためのプロセスを示すプログラムコードの図である。
【図４】コンピュータプログラムの無応答部分を識別するための本発明の各種実施例により提供され、それらで使用されるプロセスを示すフロー図である。
【図５】コンピュータプログラムの無応答部分を識別するための本発明の各種実施例により提供され、それらで使用されるプロセスを示すフロー図である。
【符号の説明】
【００４３】
２  クライアントコンピュータ
５  中央演算処理装置
７  システムメモリ
８  ネットワーク／インターネット
９  ランダムアクセスメモリ
１０  エラーを報告するサーバコンピュータ
１１  読み出し専用メモリ
１２  システムバス
１４  大容量記憶装置
１６  オペレーティングシステム
１８  アプリケーションプログラム
２０  ネットワークインターフェースユニット
２２  入出力制御装置
２４  アプリケーション性能モニタ
２６  リモート制御ファイル
４０  コンピュータプログラムのセクション
４２  コンピュータプログラムのセクション
４４  コンピュータプログラムのセクション
４６Ａ  プログラムコード
４６Ｂ  プログラムコード
４６Ｃ  プログラムコード
４６Ｄ  プログラムコード
４８Ａ  アサートタイマーコンストラクタ（タイマー１）
４８Ｂ  アサートタイマーコンストラクタ（タイマー２）
５０Ａ  アサートタイマーデストラクタ（タイマー１）
５０Ｂ  アサートタイマーデストラクタ（タイマー２）
【図１】
2006107430.tif 000003
【図２】
2006107430.tif 000004
【図３】
2006107430.tif 000005
【図４】
2006107430.tif 000006
【図５】
2006107430.tif 000007
【外国語明細書】
2006107430000001.pdf