mscorsvw.exe(.NET Runtime Optimization Service)でCPUが100%、C:\Windows\Tempにファイルが大量にできてディスクが一杯に→解決

2015年06月07日
最初に気が付いたのは、多分、今年の初め頃だったと思います。
C:\Windows\Tempに大量のファイルができていて、ディスクが一杯になっていました。

そのときは対処療法で一旦ファイルを削除して放置していましたが、最近再発したので対策してみました。
このときのメモを残しておきます。

ちなみに私の環境は、以下の通りです。
Windows 8.1
.NET framework 4.5
Visual Studio Community 2013 with Update 4

スポンサーサイト

以下、いろいろとグダグダ書いていますが、結局、mscorsvw.exe(.NET Runtime Optimization Service)がCPUを消費している現象の回避策はこちらです。

C:\Windows\Tempに大量のファイルができてディスクが一杯に


ある日、やけにディスク使用量が増えていて、ディスクの残り容量を圧迫していることに気が付きました。
ディスクを使用しているフォルダを調べたところ、
C:\Windows\Temp
で大量のディスク容量を使用していました。

ファイルとしては、例えば MSI13bd9.LOG と言った名前のファイルです。
MSIXXXXX.LOGという3,127KBのファイルが大量に存在し、ディスクを圧迫していました。
ファイルの中身はインストールのログのようでした。

このときはまだ、よく覚えてないけど何かをインストールしたときのログだろうなと思って、とりあえずファイルを削除しました。

それからしばらくして、再び同じ現象が発生しました。

これはさすがに何かがおかしいと思ってWebで調べたのですが調べ方が悪く、このときは情報を見つけられませんでした。

眠っている間にCPUがフル稼働になる


これに加えて、実はもうひとつの現象が発生していました。
PCをスリープ状態にして私も眠っている夜中に突然PCが立ち上がり、何かCPUが動いているという現象が発生していました。

普段は眠っていて気が付かないため、どの程度の頻度で発生しているのかわかりません。

たまにCPUのファンの音で目が覚めたときには、あまりに眠いので深く考えずに強制的にスリープ状態にしていました。

おかしな現象ではありましたが、何かアップデートでも動いているのかなと思って気にしていませんでした。

ある日、突然CPU負荷が上がる。現象発生の瞬間に遭遇!?


そしてまたしばらくした頃、夜中からずっとPCで作業していたときに、突然CPU負荷が上がり始めました。

タスクマネージャを開いて確認したところ、「Windows インストーラ」がCPUを利用していて、どうも何かをインストールしているようでした。

さては夜中にときどきCPUが動いているのは、これだなと思いました。

そして、私はこのときになって初めて2つの現象を結びつけることになりました。
このインストーラが、例の謎のインストールログを生成しているのではないか?

さっそくC:\Windows\Tempを開くと、予想通り、次から次へとログファイルが生成され続けていたのでした。

mscorsvw.exe(.NET Runtime Optimization Service)が関係していそう


生成され続けているログファイルのひとつを開くと、こんな感じでした。
=== Verbose logging started: 2015/XX/XX X:XX:XX Build type: SHIP UNICODE 5.00.9600.00 Calling process: C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorsvw.exe ===

他のログファイルを開いても同様で、mscorsvw.exeが関係しているようです。
タスクマネージャの「詳細」タブを開くとmscorsvw.exeが生まれたり死んだりを繰り返していました。

mscorsvw.exeは、「.NET Runtime Optimization Service」のようです。
Microsoftのかたのブログに、情報が記載されています。
Wondering why mscorsvw.exe has high CPU usage? You can speed it up. | .NET Blog

また、下記のMicrosoftのサポートページにも情報があります。
- FIX: Computer stops responding when the Mscorsvw.exe process starts in the .NET Framework 4

現象に関する細かい説明は、リンク先を参照ください。

回避策


上記.NET ブログサポートページに回避策というか、mscorsvw.exeの無効化の方法が記載されています。

環境によって微妙に異なるようですが、私の環境では、
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems
schTasks /run /Tn "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64"
という2つのコマンドを実行すればよいようです。(それぞれ1行で入力)

実際に実行するには、管理者としてコマンドを実行する必要があります。
どうやるのがベストかわかりませんけど、私の場合は、
Windowsの左下の虫眼鏡みたいな検索ボタンを押す
→「cmd」で検索
→一番上の「コマンドプロンプト」を右クリックして「管理者として実行」を選択
→表示されたコマンドプロント上で、上記のコマンドを入力しました。

回避策を実行してみるがngen.exeが終了しない


しかし、1行目のngen.exeの実行が、なぜかうまくいきません。
ngen.exeを実行した後、しばらく待ちましたが動いている様子もなく、ngen.exeが終了しないのです。
ただ、動いていたインストーラは活動を中止し、CPU負荷は低下していました。

仕方がないので、一旦、ngen.exeのコンソールを強制終了してみました。
すると、止まっていたインストーラがまた激しく動き始めました。

回避策をもう一度やってみたら解決したっぽい


もう一度、ngen.exeを実行してみると、何かのモジュールが見つからないというようなエラーメッセージが次々と表示されましたが、最終的には正常に終了しました。
メッセージは、以前にインストールして削除したモジュールが見つからないというもののようでした。

なんとなく気持ち悪いので、もう1回 ngen.exeを実行してみたところ、今度はエラーもなく実行がすぐに終了しました。
以下のような感じです。
ngen.exe実行のコンソール

対策の結果


この結果、とりあえずはCPU負荷も下がり、無事解決したようです。
と言っても、まだしばらく様子を見ないと何とも言えません。

これで、夜中に突然CPUがフル稼働したり、やたらとディスク容量を浪費したりする現象がおさまればよいのですが…

スポンサーサイト

posted by 黄昏のスペシャルパンダ at 07:57 | Comment(0) | IT関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: