申し訳ありませんが、私の本当の質問を表現する良い方法を見つけることができませんでした。
トラフィックの多いASP.NETサイトを64ビットマシンで実行しています。ただし、アプリの一部のレガシーコンポーネントが原因で、IISを32ビットモードで実行しています。この特定のWebアプリを、Webガーデンオプションがオンになっているアプリケーションプール内で実行しています(8コアマシン内で6つのプロセスを実行しています)。
週に1〜2回、プロセスの1つが100%のCPU使用率に急上昇し、サイトの速度が大幅に低下するため、私の計画では、それが発生するまで待機し、問題のあるプロセスをメモリダンプしてから、WinDbgを調べてコードがどこでホイールを回転させているかを確認するためにスパイクしているスレッド。
以前にWinDbgを使用してデバッグし、サイトでデッドロックを引き起こしている原因を突き止めましたが、それは数か月前のことであり、どのように機能させたか思い出せません。(補足として、これはあなたが行うすべてを文書化するためのレッスンです。)
DLLバージョンの問題を防ぐために、サイトを実行しているWindows2003サーバーでWinDbgを実行しています。これまでの手順は次のとおりです。エラーメッセージが表示されるのはどこが間違っているのか教えてください。
最初に、UserDumpを使用して、次のコマンドを使用してスパイクプロセスをメモリダンプします。ここで、3389はプロセスのIDです。
userdump -k 3389
ダンプをWinDbgのx86エディションにロードします。
64ビットマシンで32ビットを実行しているので、最初にメモリダンプをロードしてから、次のようにします。
.load wow64exts
.effmach x86
シンボルパスに、アプリのPDBファイルを含むディレクトリが含まれていることを確認します。
.sympath+ c:\inetpub\myapp\bin
`.load SOS'だけを実行すると、「システムは指定されたファイルを見つけることができません」というエラーで失敗するので、次の完全修飾ルートを実行します。これは機能します。
.load c:\windows\microsoft.net\framework\v2.0.50727\sos
ここから、私は迷子になります。のようなSOSコマンドのいずれかを試してみると、次の!threads
エラーが発生します。
Failed to load data access DLL, 0x80004005
そのエラーには、確認する必要のある項目の番号付きリストも付随しています。最新バージョンのデバッガーを実行していることを確認しました。mscordacwks.dllは実際にはmscorwks.dllファイルと同じディレクトリにあり、ダンプファイルと同じアーキテクチャでデバッグしています。
魔法の" .cordll -ve -u -l
"コマンドも実行しましたが、それでも何も解決しません。CLR DLL status: No load attempts
それを実行すると、いつも「」で迎えられます。次に、「.reload
」を試してみます。これにより、「」のような警告がいくつか表示されますWARNING: wldap32 overlaps dnsapi
。「」のようなことを言ってくれたらいいのにCLRDLL: Loaded DLL C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll
と思います。しかし、そうではありません。