调试ASP.Net共享池技术

调试ASP.Net共享池技术,asp.net,web-applications,iis-6,shared-hosting,Asp.net,Web Applications,Iis 6,Shared Hosting,我在一家托管公司工作,提供ASP.NET3.5托管服务。老实说,我们通常提供相当好的正常运行时间和速度。但是,我们的一个共享池出现了问题。像往常一样,我们尝试最大化可以运行到一个池中的站点数量 最近,我们遭受了持续的绞刑。进程不会崩溃,但会开始显示OutOfMemoryException或停止处理请求。我们认为这是其中一个应用程序的责任(最好知道是哪一个) 我用WinDbg处理了一些内存转储。我已经运行了f.e: !dumpheap -stat 此方法提供对象的全局内存使用。没什么了不起的。。

我在一家托管公司工作,提供ASP.NET3.5托管服务。老实说,我们通常提供相当好的正常运行时间和速度。但是,我们的一个共享池出现了问题。像往常一样,我们尝试最大化可以运行到一个池中的站点数量

最近,我们遭受了持续的绞刑。进程不会崩溃,但会开始显示OutOfMemoryException或停止处理请求。我们认为这是其中一个应用程序的责任(最好知道是哪一个)

我用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编写的两个脚本,用于计算会话数量和大小。这里也没有什么好结果。任何特殊或显著的东西(平均24000字节)

我想知道面对这类问题,你通常使用什么样的策略。您是否使用过Microsoft支持


非常感谢

问题很好,一个糟糕的asp.net可以将所有共享的web应用程序挂在同一个池中

好吧,让我看看。。。如果问题出在内存上,请从Sysinternals获取

运行它们,然后从Process explorer中找到要调查的池的PID编号,该编号位于inetinfo.exe下,可能名称为aspnet_wp.exe

现在,在VMMap add上,使用PID帮助监视此池,瞧,您看到了内存和打开的映像(aspx文件),它们可能非常多,并使问题。。。您将要看到的文件位于asp.net Framework的临时目录上,但您可以将它们连接起来,并从其来源的witch站点查看它们

如果问题不在内存上,但是程序员创建了坏循环,甚至创建了线程休眠,那么我认为process explorer是一种调查池并搜索消耗能量的方法

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

更多关于 在这些视频中有很多关于VMMap和内存管理器的信息。
,和

有很多工具,但听起来您的主要目标是确定问题的原因。这可以非常简单地通过二进制搜索完成

把游泳池分成两半,看哪一个撞坏了。重复此操作,直到崩溃的池中只有一个应用程序


这已经是O(log2n),但是您可以通过划分为两个以上的子池来任意加快进程。

好主意,但最好将它与至少一些可疑站点结合起来。为了找到可疑的地点,他需要一些方法来查看系统上发生了什么。谢谢史蒂文和亚里士多德。不幸的是,我们谈论的是在同一个池中运行的200到250个网站。也许我们得重新考虑一下。这必须与Parallels Plesk控制面板及其权限管理相结合。所以,我们没有嫌疑犯,我们不能(至少很容易)分割池。非常感谢@亚里士多德:如果有一些可能的嫌疑犯,他们可能会被转移到一个水池里,看看它是否会崩溃。如果是,很好,你节省了时间。如果没有,则返回到二进制搜索@雅各布84:很遗憾听到这个消息。我会继续考虑这个问题。每个池运行多少个站点?了解服务器有多少内存以及它的32位还是64位windows2003也会很有用。谢谢Kev,在同一个池中有200到250个(小)站点。第一个问题正在出现。4GB内存,Windows 2003 32标准。据我所知,服务器拥有他所需要的所有内存。感谢亚里士多德,现在还没有令人满意的结果,但是非常有趣的工具。我以前也用过Process Monitor,但在这些情况下这是个好主意。至少我注意到有多少资源被用来实例化共享池中的“php cgi.exe”。与VMMap相关,最大的两个内存量用于“私有数据”。我没有看到可疑的DLL。出于好奇,我知道这可能是不可能的,当我用ProcessMonitor观看时,挂起似乎消失了:)我不知道我们在这里要吸取的教训是,我们在同一个池中放置了这么多Web,这是非常不推荐的。欢迎任何意见!再次感谢亚里士多德;)@Jacob84有一种情况是,有人仍然在开发他的站点,并且犯了一些错误/编程不好,他发现这是因为页面堆栈,并修复了它,所以现在一切都好了。@Jacob84您放置了多少页面取决于服务器上的内存/速度/流量以及页面的类型。例如,一些非常好的网站几乎需要独占运行,而其他只有2-10页且没有数据库的点网网站则不存在。为什么不分成2-3个站点池(如果你有内存的话)。你是在iis上这么做的,而普莱斯克与此无关。在我的3Gb机器上,我有4个池,2个是一个应用程序的池,另外2个让其余的站点将它们分成两半(我们也有Plesk)@Jacob84你需要搜索的是dot net dll,它实际上是编译页面,占用了大量内存或有其他问题。