我有一个在 Hyper V 2008 R2 实例(2GB 内存)上运行的应用程序。该应用程序在 asp.net mvc 3.0 和 .Net 4.0 上运行。
这是一个低流量的内部应用程序(每秒 1-2 个请求)。
我们遇到了大量应用程序速度减慢的情况,但我们无法查明原因。
这是 RequestAcquireState 中卡住连接(时间超过 60 秒)的屏幕截图:
该服务器是 IIS7 和 Windows Server 2008 的全新安装(最近 10 天前),并且是 VM 中唯一的 Web 应用程序。我们还在应用程序池中使用 MSMQ,以便应用程序可以向队列广播消息。
有 5 个瘦客户端使用计算连接到一台机器并访问 Web 应用程序的终端。
答案1
我认为您可能想将此带到 StackOverflow 进行更深入的研究 - 我很确定无论您得到什么答案,都需要在 web/machine.config 文件中设置节流限制,或者重新开发应用程序代码。
仔细查看正在处理的请求后,我注意到它们都来自极少量的客户端 IP;某些组件有时会序列化来自同一 IP(或同一会话 - 所有连接是否都是同一个用户打开的?)的访问。
如果这不仅仅是回收后的缓慢,而且对主机和特别是 IO 争用(史诗磁盘队列?)的整体性能分析没有解决这个问题,我不确定是否有一个 IIS 级别的设置可以解决这个问题。(除非它不会发生在新的主机上)。
排除故障的最简单方法:在任务管理器中获取进程转储,然后使用 PSSCOR2 进行调试,尝试找出所有等待者正在等待什么,以及其中是否有令人讨厌的小“maxSomethings=2”。或者贪婪的异常处理程序没有清理,这又让我们回到了 SO 领域。