2013年6月13日木曜日

NetBeans 7.3 で temp フォルダーが爆発

NetBeans 7.3 が、ある日突然起動しなくなりました。
スプラッシュスクリーンが「モジュールの開始中...」を示した状態で、フリーズします。

モジュールが壊れたのかと思い再インストールしてみましたが、同じ。
しかしタスクマネージャーを見たところ、プロセスの使用メモリ量が微妙に増減していることに気づきました。どうやら完全にフリーズしているわけでもなさそう。さらにリソースモニターを見ると、temp フォルダーにアクセスして何か読み書きしている模様。 そこで temp フォルダーを開いてみて、仰天しました。

ご覧ください。

上は temp フォルダーのスクリーンキャプチャーですが、左下のファイル数が読めるでしょうか。

約 43 万個です。

千や二千は見たことありますが、数十万個というのは、はじめて見ました。
これは I/O で死ぬわけだわ。

ちなみに、Windows エクスプローラーがこのファイル数をカウントするだけで、十数分かかっています。

一時ファイルのほとんどは、「uigesture*.html」という謎のファイルです。

調べてみたところ、NetBeans 7.3 の既知バグだったらしく、以下がヒットしました。

Bug 161691 – 170000 uigesture* files
Bug 226088 – NB 7.3 RC2 made about 130000 uigesture* files
Bug 228670 – Infinity creating file with name uigesture*******.html

Bug 228670 には 5/2 付けで nightly にパッチを当てたと書いてあるので、次リリース時には直っているんでしょうけれど、それまでは注意が必要です。

対処としては、コマンド プロンプトで「del uigesture*」流すだけなんですが、自分の場合は削除完了までに一時間以上かかりました。

削除後は、NetBeans が問題なく起動することを確認。もちろんフィードバック送信は速攻、無効です。

しかしこれ、NetBeans に限らず、temp ファイルを利用するアプリすべてのパフォーマンスに影響すると思われるので、けっこう被害甚大な気がしますね。NetBeans を使っていないときに、NetBeans 以外のアプリでパフォーマンスの問題が発生したら、そこからこの原因までたどりつくのは、容易なことではなさそう。

今回、このバグの対処にほぼ丸一日要した(ずっとやってたわけではないですが)当事者としては、バグではなく temp ファイルテロと呼びたいです。

0 件のコメント:

コメントを投稿