2013-02-02 52 views
3

我收到“线程被中止。”在我的Asp.net应用程序的堆栈跟踪中。我正在使用这里描述的windbg tecnique来诊断: http://blogs.msdn.com/b/asiatech/archive/2012/06/21/how-to-troubleshoot-httpexception-request-timed-out-asp-net-4-0-64-bit.aspx 现在我只是试图在提供的示例asp.net应用程序中捕获此问题。我可以让asp.net应用程序超时,但是我无法获得文章中描述的转储来生成。我想我需要windbg人的帮助来理解我出错的地方。我包括windbg条目。我的输出有点不同,但我不知道要在描述的aspnet_timeout.cfg文件中使用哪个地址。诊断“线程正在中止。”在ASP.net

0:038> .symfix 
0:038> .loadby sos clr 
0:038> !name2ee system.web.dll System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded 
Module:  59201000 
Assembly: System.Web.dll 
Token:  0600699b 
MethodDesc: 592926e4 
Name:  System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded(System.DateTime) 
JITTED Code Address: 593f4200 
0:038> !U 593f4200 
preJIT generated code 
System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded(System.DateTime) 
Begin 593f4200, size 29. Cold region begin 59d14150, size 23 
Hot region: 
*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Web\ccb5cc864818531ed9725d02d3d078a6\System.Web.ni.dll 
>>> 593f4200 55    push ebp 
593f4201 8bec   mov  ebp,esp 
593f4203 57    push edi 
593f4204 56    push esi 
593f4205 8bf1   mov  esi,ecx 
593f4207 8b4e10   mov  ecx,dword ptr [esi+10h] 
593f420a 8d4508   lea  eax,[ebp+8] 
593f420d ff7004   push dword ptr [eax+4] 
593f4210 ff30   push dword ptr [eax] 
593f4212 3909   cmp  dword ptr [ecx],ecx 
593f4214 e85f83f5ff  call System_Web_ni+0x14c578 (5934c578) (System.Web.HttpContext.MustTimeout(System.DateTime), mdToken: 060025f7) 
593f4219 8bf8   mov  edi,eax 
593f421b 85ff   test edi,edi 
593f421d 0f852dff9100 jne  System_Web_ni+0xb14150 (59d14150) 
593f4223 5e    pop  esi 
593f4224 5f    pop  edi 
593f4225 5d    pop  ebp 
593f4226 c20800   ret  8 
Cold region: 
59d14150 8bce   mov  ecx,esi 
59d14152 e849bb6cff  call System_Web_ni+0x1dfca0 (593dfca0) (System.Web.RequestTimeoutManager+RequestTimeoutEntry.RemoveFromList(), mdToken: 0600699a) 
59d14157 b9508f4859  mov  ecx,offset System_Web_ni+0x288f50 (59488f50) (MT: System.Web.HttpApplication+CancelModuleException) 
59d1415c e8ef4c63ff  call System_Web_ni+0x148e50 (59348e50) (System_Web_ni) 
59d14161 8bd0   mov  edx,eax 
59d14163 c6420401  mov  byte ptr [edx+4],1 
59d14167 8bcf   mov  ecx,edi 
59d14169 e89a0963ff  call System_Web_ni+0x144b08 (59344b08) (System_Web_ni) 
59d1416e e9b0006eff  jmp  System_Web_ni+0x1f4223 (593f4223) 

aspnet_timeout.cfg

<ADPlus Version='2'> 
     <!-- Configuring ADPlus to log all first chance exceptions --> 
     <!-- Will still create full dump for any type of second chance exceptions --> 
    <KeyWords> 
    <keyword Name="loadbysos"> .loadby sos clr</keyword> 
    <keyword Name="GetJIT"> !name2ee System.web.dll System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded </keyword> 
    <keyword Name="JITAddress"> .foreach /pS 0n13 (record {!name2ee System.web.dll System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded}) { r $t1= ${record}; bp $t1+0xb14150 ".dump /ma /u ${AdpDumpDirEsc}\\Full Request timed out ${AdpProcName}_.dmp;g"; .printf"*breakpoint list*\n"; bl}  </keyword> 
    </KeyWords> 
    <Settings> 
        <Option> NoDumpOnFirst </Option> 
        <RunMode> CRASH </RunMode> 
    </Settings> 
    <PreCommands> 
     <DebugActions> loadbysos; GetJIT; JITAddress </DebugActions> 
    </PreCommands> 
</ADPlus> 
+1

好,一个线程中止,但没有您的网站,或不?也许是休息时间,或者池回收就是这样做的。你有很多线程中止? – Aristos

回答

4

此日志表明你有一个超时的地方。但是你的计算机上必须有一些其他事件显示在巫婆页面中,你有这个时间。

如果您有很多次需要找到导致该问题的页面,可能是下载页面来保存会话,或者需要比Timeout集合更多的时间运行的页面。

这个执行timeout设置在web.config中的110秒默认值:

<system.web> 
    <httpRuntime executionTimeout="110"/> 
</system.web> 
+0

“System.Data.DataException:数据异常 线程正在中止。”发生在我的日志中的各种途径。我试图按照列出的文章中的说明设置一个断点,该断点将生成一个转储文件,并允许我看到导致此异常的实际堆栈跟踪。我的问题是确定在文章中描述的配置文件中设置哪个地址。 – jlo

+0

你有没有想过问题是什么?我在调用Web服务时遇到了ThreadAbortedExceptions,但无法使用IIS7中的示例服务在本地重现此问题。 – jaffa

+0

@jaffa由于某些原因,有时间,超时,你无法避免。但是你不应该在正常行为上超时,并且不要让糟糕的设计和超时,因为sql运行时间太长,或者代码会花费太多的时间来完成。 – Aristos