開発したり、運用していると、原因不明の障害に出くわすことがある。アプリのログやWindowsイベントログを確認しても原因特定できず、アプリを再インストールしても、正常に動作しない。そんな場合の大まかな切り分けをメモする。
目次
(0) 大まかな流れ
- アプリケーションのログやWindowsイベントログから原因を探す。
- それでも原因が見つからない場合、可能ならアプリケーションを再インストールする。
- それでも原因が見つからない場合、常駐しているサービス・アプリケーションを停止する。
- それでも原因が見つからない場合、CPU・メモリ・ディスクIOに負荷をかける。
- それでも原因が見つからない場合、セーフモードにする。
- いずれでも原因が見つからない場合の対処
(1) 各ログから原因を探す
アプリケーションで出たエラーログやWindowsのイベントログを検索すると、大抵の問題は解決するので、まずは検索。
(2) アプリケーションを再インストールする
時々使用するようなツールで、アンインストールしても、問題ないような場合は、設定をバックアップの上、再インストールし、動作を確認する。
(3) 常駐サービス・アプリケーションを停止する
よくあるのが、常駐しているウィルスソフトがファイルスキャンのために、勝手にロックしていて、書き込みできなかったパターン。
そういったことを切り分けるため、常駐しているサービスやアプリケーションをすべて停止させ、必要最小限のWindowsサービスのみが動作する状態にして、動作を確認する。停止手順は以下のとおり。
-
- 管理者権限でコマンドプロンプトを起動する。
- msconfig と入力し、Enter。
- 「システム構成」ダイアログが起動するので、「サービス」タブを選択。
- 「Microsoft のサービスをすべて隠す」をチェックする。
- 「すべて無効」をクリックする。
- 「スタートアップ」タブをクリックを選択し、「すべて無効にする」ボタンをクリックする。
- Windows を再起動する。
- Windows へログインし、アプリケーションの動作を確認する。
- 正常に動作した場合は、停止したサービス、またはアプリケーションのどれかが原因。
(4) CPU・メモリ・ディスクIOに負荷をかける
アプリが正常に動作したり、しなかったりと挙動が変わる場合は、ソースコードの問題でなく、運用マシンへの一時的な負荷による問題の可能性が高い。特に仮想マシンを使用していると、リソースを共有していることもあり、発生しやすい。
- 「Windows 用の CPU 負荷ツール(cpustres.exe)を使ってみる」
- 「Windows 用の メモリ負荷ツール(testlimit.exe)を使ってみる」
- 「Windows 用のディスクIO負荷ツール(DiskSpd.exe)を使ってみる」
(5) セーフモードにする
Windowsをセーフモードで起動し、動作を確認する。正常に動作した場合は、デバイスのドライバが原因。
セーフモードの実行方法は以下のMicrosoftのサイトのとおり。
(6) いずれでも原因が見つからない場合の対処
- ハードディスク上でファイルが壊れている可能性あり、ディスクチェックしてみる。
- Windows の再インストール。
- ハードウェアの何かが壊れている可能性あり、別PCにし、動作させてみる。
以上