问题
我有一个连接到 SQL 服务器数据库的 ASP.NET Web 应用程序。
有时,当某些特定用户尝试登录时,应用程序会挂起。当我尝试从我的机器上以该用户身份登录实时站点时,我可以复制此问题,但问题不会出现在相同的站点中(相同的代码,相同的机器,相同的数据库和用户帐户——只有工作进程和应用程序池不同)。
该问题在应用程序池回收时也消失了(至少是暂时的)。当它再次发生时,它往往是相同的用户。
通常我会认为这是特定于应用程序的代码或数据库中的问题,我仍在寻找一种可能的方法,但事实上它不会发生在针对同一个数据库运行的相同站点中,这让我怀疑。
更多信息
从某些日志记录来看,挂起似乎发生在请求页面的 Page_Load 之后,但在该页面上用户控件的 Page_Load 之前。
挂起的请求可以在IIS中站点工作进程的当前请求中看到,状态显示为ExecuteRequestHandler,模块为IsapiModule。
SQL 服务器的活动监视器显示在应用程序挂起期间没有长时间运行的查询,分析器显示在挂起期间没有来自应用程序的频繁相同查询。
大多数用户可以毫无问题地继续使用该应用程序。
应用程序将用户详细信息与进程中的 ASP.NET 会话状态一起存储。
在某些情况下,问题会在 10 到 20 分钟后自行消失,而在其他情况下,它会一直持续到应用程序池回收为止。
有时,日志显示在请求页面的 Page_Load 后挂起约 5 分钟后,第一个子用户控件的 Page_Load 被调用,之后又出现了挂起。
概括
我基本上想知道这是否有可能是由于 ASP.NET 会话锁定问题引起的(是否有任何已知的错误,或者会话死锁的危险?)
请求的线程被分配了低优先级处理器时间是否有问题?
如果有人对这可能是什么有任何想法我会感兴趣,如果没有,那么调试工作进程的内存转储可能对我有帮助吗?我没有任何经验,也不知道对实时运行的工作进程进行内存转储有多安全。