nVidia NViewでプログラムが100%CPUを消費するのはなぜですか?
質問
最近、実稼働環境でアイテムの大きなリストをスクロールすると応答しなくなることがあるWindowsプログラムで作業していました。もちろん、私のデスクトップでも問題なく動作します。実稼働環境は次のとおりです。
- 2つのモニターを備えたWindows XPベースのワークステーション
- nViewが有効なnVidiaビデオドライバ
注目すべきは、プロセスの終了時に生成されるワトソン博士のスタックトレースです。
State Dump for Thread Id 0xef4 eax=00e3fff8 ebx=000000a0 ecx=00e00000 edx=00000000 esi=0003fff8 edi=00e40000 eip=00b920c2 esp=0012bcac ebp=00000000 iopl=0 nv up ei ng nz na pe cy cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000283 \system32\nview.dll - function: nview!NVLoadDatabase 00b920a8 c80b0600 enter 0x60b,0x0 00b920ac 83c30f add ebx,0xf 00b920af 33f6 xor esi,esi 00b920b1 03f9 add edi,ecx 00b920b3 83e3f8 and ebx,0xfffffff8 00b920b6 3bcf cmp ecx,edi 00b920b8 89742414 mov [esp+0x14],esi 00b920bc 734c jnb nview!NVLoadDatabase+0xcaf (00b9210a) 00b920be 8bc1 mov eax,ecx 00b920c0 8b10 mov edx,[eax] 00b920c2 8b4004 mov eax,[eax+0x4] ds:0023:00e3fffc=00000000 00b920c5 89442414 mov [esp+0x14],eax 00b920c9 8bc2 mov eax,edx 00b920cb 2500000001 and eax,0x1000000 00b920d0 33ed xor ebp,ebp 00b920d2 0bc5 or eax,ebp 00b920d4 7414 jz nview!NVLoadDatabase+0xc8f (00b920ea) 00b920d6 8bc2 mov eax,edx 00b920d8 c1e008 shl eax,0x8 00b920db 8be8 mov ebp,eax 00b920dd c1f81f sar eax,0x1f ChildEBP RetAddr Args to Child 00000000 00000000 00000000 00000000 00000000 nview!NVLoadDatabase+0xc67
なぜこの問題は本番環境でのみ発生したのですか?
解決
nViewはNVidiaが提供するサードパーティDLLであるため、これは興味深いものです。 nview!NVLoadDatabase
に関するインターネットへの投稿は、nviewにパッチが当てられていない欠陥があることを示唆しています。これは、これらのレポートで確認されているように、エクスプローラーが100%CPUを使用しているという事実によってサポートされています。参照: http://forums.nvidia.com/lofiversion/index.php? t36879.html
この問題の詳細な調査は、このサイトで入手できます。 http: //blogs.technet.com/marcelofartura/archive/2007/02/28/real-case-random-apps-running-100-cpu.aspx
この記事のとおり、ハングはnview.dllの無限ループが原因です。オンラインで説明されているアセンブリ命令とレジスタ値はログにあるものと完全には一致していませんが、それらは同じ問題であると結論付けるのに十分近いものでした。
この問題を回避するために、nView Desktop Managerを無効にしました(デスクトップを右クリックし、nViewプロパティを選択して、nView Desktop Managerグループボックスで[無効]をクリックします)。これを行う前に、ハングを一貫して再現することができました。ただし、nViewを無効にした後、ハングを再現できませんでした。したがって、これは実行可能な回避策のようです。
とにかく、私はこれが誰にも役立つ場合に備えてここに投稿しました。これは私にこれを追いかける悲しみをたくさん引き起こしました。