ASP.NET Web应用程序死锁 – 认为它是由SQL Server锁定引起的
我们客户的网络应用程序会以随机间隔突然重启.对于每次重启,我们在
Windows事件日志中找到了这样的条目:
Event Type: Warning Event Source: W3SVC-WP Event Category: None Event ID: 2262 Date: 2/21/2010 Time: 1:33:52 PM User: N/A Computer: LIQUID-NXCFZ9DJ Description: ISAPI 'c:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll' reported itself as unhealthy for the following reason: 'Deadlock detected'. 这种情况在3周内发生了10次,其中有几次在几个小时内发生了2到3次,并且在没有发生这种情况的情况下持续了一周. 在崩溃转储中,我们可能有70-80个客户端连接,如下所示: GET request for <path here> Mapped To URL <mapped path> HTTP Version HTTP/1.1 SSL Request False Time alive 00:55:24 QueryString <query string here> Request mapped to HTTP Request State HTR_READING_CLIENT_REQUEST Native Request State NREQ_STATE_PROCESS (这是55分钟!!!没有理由客户端连接应该在那么久) machine.config中的相关条目: <system.net> <connectionManagement> <add address="*" maxconnection="200" /> </connectionManagement> </system.net> 和(内): <deployment retail="true" /> <!--<customErrors mode="Off"/>--> <processModel autoConfig="true" memoryLimit="60" maxIoThreads="200" minIoThreads="30" minWorkerThreads="40" maxWorkerThreads="200" clientConnectedCheck="00:00:05" /> <httpRuntime minFreeThreads="20" minLocalRequestFreeThreads="10" enableKernelOutputCache="false" maxRequestLength="10240" /> 最近一次,我们能够查看它发生的情况,并在Sql Server中看到大约20个查询都处于“挂起”状态.看起来它们可能都与一个表有关(Items表,一个非常重要的用于许多不同的操作). 我们不确定最好的办法是在问题的中间.崩溃发生时,Sql Server清除. 任何有关正在发生的事情的指导,或如何找出正在发生的事情,都将非常感激. 解决方法
如果它是死锁,则意味着死锁具有在SQL外部完成的循环.这意味着您在保存SQL资源(即事务)时尝试获取进程资源(即C#’lock’).举个例子,可以考虑以下情况:
> T1启动SQL事务并更新SQL中的表A. 在SQL的死锁监视中无法检测到这种情况,因为死锁循环在SQL之外完成.你怎么诊断这样的问题?对于循环的SQL服务器端,您可以使用许多强大的工具,主要是sys.dm_exec_requests,它可以告诉您哪些请求被哪些请求阻止.但不幸的是,在循环的应用程序大小上没有开箱即用的仪器,所以你是独立的.经验丰富的眼睛可以检测代码检查的问题(在SQL事务处理期间执行SQL调用同时执行SQL调用或获取C#锁是一个很大的收获),否则你必须运用一些熟练的WinDbg-fu,或者仪器码. 您还应该考虑到这根本不是僵局.您可以让应用程序中的普通代码缺陷阻止您的20个SQL请求,例如某些请求上的事务泄漏(即,请求等待阻止它们提交的事务,但该事务已泄漏到代码中,并且永远不会关闭).同样,sys.dm_exec_requests是你的朋友. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC3 – 将字节数组发布到控制器 – Databa
- asp.net – 为什么不调用我的IHttpHandler?
- asp-classic – 如何使用AES在VBScript中进行加密?
- asp.net – 如何从JavaScript访问ASPxTextBox的值
- asp.net – 尽管设置了FormsAuthenticationTicket的UserDat
- 使用log4net和ASP.NET跟踪会话变量
- asp.net – Linq对sql对象是否可序列化为会话状态?
- asp.net-mvc – 为什么要使用视图模型?
- asp.net – ASPXAUTH cookie未保存
- asp.net – 跟踪广告链接点击但保持SEO友好链接?