Q

Windows 2000の稼働状況を,管理ツールの[パフォーマンス]にある[システムモニタ]にて監視していたところ,いくつかのパフォーマンス・オブジェクトが消えていました(図8)。この現象の直前に実行した作業としては再起動したことぐらいで,システム・モニターの設定やソフトのインストールなどで特に大きな作業はしていません。また,見かけ上は動作不良などもないようです。再度リブートしてみましたが,やはりオブジェクトは消えたままです。

図8●パフォーマンス・モニタで使用するMemoryやProcessorなどいくつかのオブジェクトが消えている


A

Windows 2000では,システム・モニターで使用するパフォーマンス・オブジェクトが正常に動作していないと判断すると,その機能を提供するパフォーマンス拡張DLLを無効にします。Windows NTでは,問題のあるパフォーマンス拡張DLLが1つでも存在すると,システム・モニターが動作不能になりました。Windows 2000以降では「不審な動作をするオブジェクトだけが動作しなくなる」設計となっています。正常に稼働している他のパフォーマンス・ログ・データを保護するためです。

 Windows 2000では,(1)誤った形式でデータを返す,(2)未処理のプログラム・エラーを起こす,(3)データを返す時間が長すぎてタイムアウトした――などの場合,問題となるパフォーマンス拡張DLLを無効にします。多くの場合,アプリケーション・ログに,拡張DLLを無効にした理由を示すイベントも記録されているはずです(図9)。これがあれば,ある程度問題の切り分けにもなります。

図9●パフォーマンス・モニタのオブジェクトが消えた場合,その理由を示すイベントが記録されることがある

 無効になったパフォーマンス拡張DLLは,システムを再起動しても読み込まれません。復旧には,レジストリの編集が必要です。レジストリ・キーHKEY_LOCAL_MACHINE\SYSTEM
\CurrentControlSet\Servicesを選択します。そこでDisable Performance Countersを検索し,パラメータが「1」かどうかを調べます。「1」の場合は,「0」にするか,そのレジストリ値を削除します。「1」に設定されたDisable Performance Countersがなくなるまでこの手順を繰り返し実行します。

 レジストリの編集以外に,リソース・キットのExCtrlListというユーティリティを使うだけで復旧することも可能です。詳細は,マイクロソフトのサポート技術情報「パフォーマンスモニタにパフォーマンスオブジェクトが表示されない」(248993)を参照してください。

 このようなトラブルは「テストのために意図的に仮想メモリー不足を発生させた」「システムに一時的に高い負荷がかかった」などの場合にも発生する可能性があります。先ほどパフォーマンスDLL無効化の原因としてあげた状況を引き起こす場合があるからです。しかし,リソース不足でもなく,問題が頻発する場合は,システムに深刻な問題を抱えている可能性があります。拡張DLLの開発元へ問い合わせる必要があるでしょう。Windows 2000標準のパフォーマンス・オブジェクトはマイクロソフトに,サード・パーティ製のオブジェクトはサード・パーティに尋ねます。

音喜多 朋子