我们最近在 Windows Server 2003/IIS 上推出了一个 Web 应用程序。每天多次生成一个线程,其利用率为 20%-25%。使用进程资源管理器,我看到了此消息底部发布的堆栈。我可以终止这些线程,而且似乎不会产生任何影响。但是,每天我都必须观察 Web 服务器,并在出现这些线程时终止它们,否则应用程序会变得非常缓慢。
我需要一种方法来排除故障并确定问题的根源。有什么想法吗?
ntkrnlpa.exe+0x8db2e ntkrnlpa.exe+0x29a82 ntkrnlpa.exe+0x331a4 ntkrnlpa.exe+0x2e3c6 ntkrnlpa.exe+0xf6299 ntkrnlpa.exe+0xeede2 ntkrnlpa.exe+0x897cc ntdll.dll!KiFastSystemCallRet WS2_32.dll!recv+0x6f AppSvr.dll!DllUnregisterServer+0x652 OLEAUT32.dll!DispCallFunc+0xab OLEAUT32.dll!SafeArrayCopyData+0x397 AppSvr.dll!DllGetClassObject+0xab8 OLEAUT32.dll!DllRegisterServer+0x5bf RPCRT4.dll!NdrAsyncServerCall+0x1e7 RPCRT4.dll!CStdStubBuffer_Invoke+0x82 OLEAUT32.dll!DispGetParam+0x5b6 ole32.dll!StgGetIFillLockBytesOnFile+0x13d32 ole32.dll!StgGetIFillLockBytesOnFile+0x13cdf ole32.dll!DcomChannelSetHResult+0xaab ole32.dll!DcomChannelSetHResult+0x495 ole32.dll!StgGetIFillLockBytesOnFile+0x13fbe ole32.dll!StgGetIFillLockBytesOnFile+0x13a7d ole32.dll!StgGetIFillLockBytesOnFile+0x12f64 ole32.dll!CoFreeUnusedLibrariesEx+0x9f5 ole32.dll!CoFreeUnusedLibrariesEx+0x165 ole32.dll!CoRegisterChannelHook+0x538 kernel32.dll!GetModuleHandleA+0xdf
答案1
这是你被杀死的线程的堆栈吗?堆栈中奇怪的是这两个调用:AppSvr.dll!DllUnregisterServer+0x652 OLEAUT32.dll!DllRegisterServer+0x5bf
为什么你的应用程序会在运行时注册或注销 COM 对象?
如果 AppSrv.dll 是您的应用程序代码,我会检查 DllUnregisterServer 和 DllRegisterServer 函数以确保它们没有太多操作(可能会挂起进程或出现长循环)。
要关注的另一个 API 是调用 WS2_32.dll!recv+0x6f...这些可能正在执行大量工作或等待一些网络流量。
戴夫