Sorry, I could not find a good way to talk about my real question.
I am running an ASP.NET website with high traffic on a 64 bit machine. However, IIS runs in 32-bit mode due to some legacy application components. I run this particular web application in the application pool, which has a web garden option (6 processes are running inside an 8-processor machine).
Once or twice a week, one of the processes will take off in 100% CPU usage, which will lead to a giant slowdown for the site, so my plan was to wait until this happens, the memory would throw offensive process, and then push WinDbg to zero in the stream that appears to see where the code rotates its wheels.
I debugged the use of WinDbg before figuring out what created the deadlock on the site, but that was a few months ago, and I don’t remember how I got it working. (As a note, this is a lesson to document everything you do.)
I run WinDbg on a server running Windows 2003 that runs this site to prevent problems with the version of the DLL. Here are my steps so far, please let me know where I am going wrong to receive the error message I receive.
The first memory unloads the spiking process using UserDump with the following command, where 3389 is the process identifier:
userdump -k 3389
I am loading a dump into the x86 version of WinDbg.
Since I run the 32-bit version on a 64-bit machine, I load the memory dump first, and then:
.load wow64exts
.effmach x86
I am sure my symbol path includes a directory containing PDB files for applications:
.sympath+ c:\inetpub\myapp\bin
Only ".load SOS" is executed with the error "The system cannot find the specified file", so I go to the fully qualified route of the next action, which works:
.load c:\windows\microsoft.net\framework\v2.0.50727\sos
From here I am lost. I try to execute any of the SOS commands, for example !threads , only to get this error:
Failed to load data access DLL, 0x80004005
This error is also accompanied by a numbered list of items that I should check. I verified that I am using the latest version of the debugger, mscordacwks.dll is actually located in the same directory as the mscorwks.dll file, and I am debugging the same architecture as the dump file.
I also run the magic command .cordll -ve -u -l , but that doesn’t solve anything. I always welcome " CLR DLL status: No load attempts " when I execute this. Then I try " .reload ", which gives some warnings like " WARNING: wldap32 overlaps dnsapi ". I would like to say something like " CLRDLL: Loaded DLL C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll ". But this is not so.