asp.net - 调试 ASP.Net 共享池技术

标签 asp.net web-applications iis-6 shared-hosting

我在一家托管公司工作,提供 ASP.Net 3.5 托管。老实说,我们通常提供相当好的正常运行时间和速度。然而,我们的共享池之一遇到了问题。像往常一样,我们尝试最大限度地增加一个池中可以运行的网络数量。

最近我们遇到了持续挂起的问题。该进程不会崩溃,但开始显示 OutOfMemoryExceptions 或停止处理请求。我们认为这是其中一个应用程序的责任(如果知道是哪一个应用程序就好了)。

我有一些用 WinDbg 处理过的内存转储。我已经运行了 f.e:

!dumpheap -stat

该方法提供对象的全局内存使用情况。没什么了不起的......我也检查过:

~*e!clrstack 

我看到各种非托管线程。在那些被管理的人中会出现这样的堆栈:

[HelperMethodFrame_1OBJ: 0f30e320]            
System.Threading.WaitHandle.WaitMultiple(System.Threading.WaitHandle...
0f30e3ec 7928b3ff System.Threading.WaitHandle.WaitAny(System.Threading...
0f30e40c 7a55fc89 System.Net.TimerThread.ThreadProc()...
0f30e45c 792d6e46 System.Threading.ThreadHelper.ThreadStart_Context(System...
0f30e468 792f5781 System.Threading.ExecutionContext.runTryCode(System...

至少,我还没有看到异常抛出或类似的情况(在那一刻)。我还访问了 Tess Ferrandez 编写的两个脚本,用于计算 session 数量和大小。这里也没有希望的结果。任何奇特或非凡的东西(平均 24000 字节)。

我想知道您面对此类问题时通常采用什么策略。您曾经使用过 Microsoft 支持吗?

非常感谢!

最佳答案

非常好的问题,糟糕的 asp.net 可以将所有共享的 Web 应用程序卡在同一个池上......

好吧,让我们看看...如果问题出在内存上,请获取 VMMap来自 Sysinternals,以及 Process Explorer

运行它们,然后从进程资源管理器中找到您想要调查的池的 PID 号,它位于 inetinfo.exe 下,并且可能具有名称 aspnet_wp.exe强>.

现在,在 VMMap 上添加用于监视此池的 PID,以获取帮助,瞧,您会看到内存和打开的图像(aspx 文件),它们可能很多并且会产生问题...您要处理的文件要查看的内容位于 ASP.NET Framework 的临时位置,但您可以连接它们并从巫婆站点查看它们的来源。

如果问题不在内存上,而是程序员创建了错误的循环,甚至创建了线程 sleep ,那么我认为进程资源管理器是一种调查池并搜索消耗功率的方法。

附加

也许每 15 分钟一次池回收可以解决这个问题?

更多信息

在这些视频中,有很多有关 VMMap 和内存管理器的信息。 Mysteries of Windows Memory Management, Part 1 ,和, Part 2

关于asp.net - 调试 ASP.Net 共享池技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186866/

相关文章:

asp-classic - 经典 ASP #include 虚拟不工作

c# - Mvc Dropdownlist 回发值

html - 所选选项卡上的选项卡菜单颜色未更改

database - 为什么总是存储表情符号的简称?

wcf - 生成的元数据 (WSDL) 中的 .net 4 WCF 端点指向节点而不是托管在负载平衡 (NLBS) IIS6 上的虚拟主机

c# - 如何在 ASP.Net 4.0 中增加 url 的长度?

asp.net - 密码学不安全算法

.net - 将 CSS 应用于 formview 控件中的文本框

java - 从 Tomcat 7 到 Weblogic 10.3.5 的 War 部署不起作用

android - 用于自适应图标的 WebApp manifest.json