IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Windows/Linuxの実践トラブルシューティング

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第9回 プログラムを調べる 2017年5月

こんにちは。加賀結衣(かが ゆい)と申します。

このコラムでは、株式会社リックテレコムの「Windows/Linuxのトラブル追跡実践ノウハウ」をもとに、私が実際にPCに触りながら学んだことをまとめていきます。
コラム内のページ表記は、この書籍のページを示します(Pはページです)。
日々発生するコンピュータのトラブルに対し、どのようなツールを使い、どのような情報を収集すればよいか知りたいと思われている初心者の方に、このコラムが少しでもお役に立てば嬉しいです。

今回は、第4章 「プログラムを調べる」の「4.1 Windows編」を確認していきましょう。

---------------------------------------------------------------------

第4章 プログラムを調べる
4.1 Windows編
 4.1.1 システムで実行されているプログラムを調べる(p.185)
 4.1.2 特定のファイルを開いているプログラムを探し出す(p.191)
 4.1.3 プログラムの使用するDLLを調べる(p.193)
 4.1.4 プログラムがアクセスするファイルやレジストリを調べる(p.196)

----------------------------------------------------------------------

 

 4.1.1 システムで実行されているプログラムを調べる(p.185)

システムで実行されているプログラムの確認方法には様々なものがありますが、代表的なものとしては、タスク マネージャーにて確認する方法があります。

タスク マネージャーは、タスクバーを右クリックするか、Ctrl+Alt+Del キーを押すかして、[タスク マネージャーの起動]をクリックする、または、Ctrl+Shift+Escをクリックする、「スタート」 - 「プログラムとファイルの検索」にtaskmgr を入力する等の方法で表示させることができます。

fig01

タスク マネージャーが起動すると、まず表示されるのが[アプリケーション]タブです。
何らかのアプリケーションが固まってしまった場合などに、[タスクの終了]を行うことで対象のタスクを終了させることができます。

[プロセスタブ]では、[アプリケーションタブ]よりもさらに詳細な情報を確認できます。
具体的には、自分が実行しているプロセス以外のプロセスを見ることができます(要管理者権限)。また、既定で表示されている項目以外に、メニューバーの[表示]-[列の選択]をクリックすると、表示項目を増やすことができます。

fig02

例えば、[CPU時間]は、対象のプロセスが開始されてから現在までに使用した累積のCPU時間を秒単位で表したものです。高負荷の要因を調査する場合などには、既定で表示される[CPU]以外にこの[CPU 時間]の値の増加についても合わせて確認することで切り分けを行います。
また、[コマンド ライン]を表示させると、対象のプログラムを実行するための情報を確認することができます。

[サービス]タブでは、各サービスの現在の状態を確認することができます。
任意のサービスを選択し、右クリックして[プロセスの表示]をクリックすると、[プロセス]タブに遷移し、該当のサービスのプロセスを確認することができます。
なお、[プロセス]タブにて任意のプロセスを選択し[サービスの表示]をクリックすると、[サービス]タブに遷移し、該当のプロセスのサービスを確認することができます。

[パフォーマンス]タブの[リソースモニター]をクリックすると、各プロセスのCPU使用率やメモリの使用状況、各プロセスの送信/受信バイトなど、様々な情報を調べることができます。

fig03

fig04

このように、タスクマネージャーでは多彩な情報を確認することができます。

 

 4.1.2 特定のファイルを開いているプログラムを探し出す(p.191)

特定のファイルを開いているプログラムを探したいとき、利用できるのがProcess Explorerです。Process Explorerは、高機能版のタスク マネージャーのようなもので、Microsoftの公開している無償のトラブルシューティングツール集であるWindows Sysinternal内で入手可能です。

Windows Sysinternals
https://technet.microsoft.com/ja-jp/bb545021

Process Explorer
https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx

fig05

Process Explorerの利用方法は簡単で、ダウンロード後procexp.exeを右クリックし、管理者として実行します(インストール不要)。
画面が開いたら、画面上部の[Find]-[Find Handle or DLL...]をクリックすると、対象のファイルを開いているプログラムとファイルハンドルの情報が表示されます。

 

 4.1.3 プログラムの使用するDLLを調べる(p.193)

前記のProcess Explorerは、プログラムが実行時にロードしているDLLを調べることもできます。
Process Explorerを起動したら、上部の歯車型のアイコン(赤枠内。view DLLs)をクリックし、上部ペインでプロセスを選択すると、そのプロセスがその時点でロードしているDLLが下段ペインに表示されます。

fig06

また、プログラムが依存しているDLLを調べるには、Dependency Walkerというツールが役立ちます。

Dependency Walker
http://dependencywalker.com/

Dependency Walkerの利用方法は簡単で、ダウンロード後depends.exeを右クリックし、管理者として実行します(インストール不要)。
画面が開いたら、画面上部の[File]-[Open]をクリックし、調査対象の実行ファイル(exeファイル)を開くと、その実行ファイルが依存しているDLLの調査がスタートします。

fig07

 

 4.1.4 プログラムがアクセスするファイルやレジストリを調べる(p.196)

あるプロセスが行った処理 (ファイル システム、レジストリ、プロセスおよびスレッドの活動) をリアルタイムで表示することができ、プログラムからのファイルやレジストリへのアクセスを確認することができる代表的なツールに、Process Monitorがあります。
Process MonitorはProcess Explorerと同様、Windows Sysinternal内で入手可能です。

Process Monitor
https://technet.microsoft.com/ja-jp/sysinternals/processmonitor.aspx

ダウンロードしたファイルを展開してprocmon.exeをダブルクリックして利用します。

Process Monitorは、起動と同時に記録をスタートします。
記録を止めるには、captureボタン(赤枠内)をクリックします。
再度captureボタンをクリックすると、再度記録を行うことができます。
なお、clearボタンをクリックすると、記録した情報を削除できます。

fig08

記録される情報は膨大であるため、フィルター機能を利用して必要な情報を絞り込んでいきます。[Filter]-[Filter]を選択し、開いた画面でフィルターをかけます。

例えば、以下の例ではプロセス名「notepad.exe]を含む(contains)ものを表示することができます。

fig09

また、フィルターは、アクセス先に基づいてかけることもできます。
ファイル アクセス、レジストリ アクセス、ネットワーク アクセスを記録、表示するボタンを利用することで対象を絞った効率的な調査が可能となります。

fig10

例えば、レジストリ アクセスがトラブル要因と想定される場合、以下のようにレジストリ アクセスのみを選択して事象を再現させると、画面上で、事象発生時のレジストリ アクセスを確認することができます。

fig11

Process Monitorで採取した情報は、[File]-[save]で任意のパスに任意のフォーマットで保存することができます。

Process Monitorを利用すると、エラーがあったかどうかや何にアクセスしたかなどの手がかりをつかむことができます。
また、あるプロセスのファイルやレジストリ アクセスの挙動からマルウェア等怪しいプロセスを発見することもできます。

怪しいプロセスをProcess Monitorで発見!
http://ascii.jp/elem/000/000/674/674669/

 

[今日のまとめ]
★システムで実行されているプログラムは、タスク マネージャーにて確認することができます。
★Process
Explorerを利用すると、特定のファイルを開いているプログラムを探したり、プログラムが実行時にロードしているDLLを調べることができます。また、Dependency Walkerを使うと、プログラムが依存しているDLLを調べることができます。
★Process Monitorを使うと、プログラムからのファイルやレジストリへのアクセスを確認することができます。

なお、サーバ(OS)・ネットワーク分野における原因究明の仕方や切り分けなどを行う方法を基礎から学びたい方には、CTC教育サービスのオリジナルコースである
「システムトラブルシュート(ファーストステップ)」
「システムトラブルシュート(ネクストステップ)」がお勧めです。
詳細は、以下のリンクをご参照くださいませ。
http://www.school.ctc-g.co.jp/course/SSE01.html
http://www.school.ctc-g.co.jp/course/SSE02.html

最後まで読んでくださってどうもありがとうございました。次回もどうぞお楽しみに。

 


 

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート