我有一个怀疑,我的服务器上的网站有一个内存泄漏,因为w3wp.exe进程似乎比正常增长更快,我有几个OutOfMemoryExceptions。
有一个简单的方法来确定在IIS中每个网站/应用程序池使用多less内存?
我意识到其他人已经给出了“将每个站点移到它自己的应用程序池”的答案,所以我并不意味着冗余,但我想给出一个更彻底的答案。 首先将每个网站转移到自己的应用程序池中 – 如果你有一个“很多”,你至less可以将它们分解成组。 将每个应用程序池分配给不同的帐户确实没有什么好的理由,可以通过更简单的方法查看哪个应用程序池导致问题。
接下来你使用iisapp.vbs: http : //www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/b8721f32-696b-4439-9140-7061933afa4b.mspx? mfr = true这是一个简单的命令行工具。
打开任务pipe理器,并添加列PID(进程标识符)。 从命令行运行iisapp.vbs,它会告诉您哪个w3wp.exe服务属于哪个应用程序池(通过PID),您可以从那里缩小范围。
一旦你的networking出现了应用程序池中孤立的问题,并且如果需要帮助诊断导致泄漏的原因,则可以使用Microsoft IISdebugging工具: http : //www.microsoft.com/downloads/details.aspx? FAMILYID = 28bd5941-c458-46f1-b24d-f60151d875a3&DisplayLang = EN
然后:
IISdebugging诊断工具可以帮助跟踪工作进程的CPU和内存问题。 微软有一个很好的kb的文章,也通过基础知识: http : //support.microsoft.com/kb/919791 。
在系统上本地安装IISdebugging诊断程序。
在开始>程序> IIS诊断>debugging诊断工具>debugging诊断工具下打开debugging诊断工具。
单击工具>选项和设置>性能日志选项卡。 select启用性能计数器数据logging选项。 点击OK。
使用任务pipe理器来查找工作进程的PID。
select进程选项卡,并在列表中find进程。
右键单击该进程并selectCreate Full Userdump。 这将需要几分钟的时间,并会popup一个框,为您提供转储文件的path。
select高级分析选项卡,然后单击添加数据文件button。 浏览到跳转创build的转储文件,然后单击确定。
从“可用分析脚本”框中select“崩溃/挂起分析器”以查看CPU性能和崩溃分析。 点击开始分析。
几分钟后,将生成一个报告,其中包含堆栈跟踪信息以及有关执行时间超过90秒的任何请求的信息。 请注意,内存转储使用了几百MB的空间,因此请确保将该工具安装在具有足够debugging空间的驱动器上。 此外,如果该盒子负载过重,则可以在系统上创build用户转储,将文件复制到工作站,然后在本地执行分析。
如果您想知道哪个站点消耗的内存比需要分配专用应用程序池的内存多,可以通过任务pipe理器来帮助诊断问题。
每个应用程序池应该在任务pipe理器中拥有自己的进程。
如果您发送了几个本地帐户,则可以将每个应用程序池分配给不同的帐户,从而确定哪个应用程序池导致问题。
你也应该去看看: https : //stackoverflow.com/questions/363680/stringbuilder-for-string-concatenation-throws-outofmemoryexception因为这可能是你的内存问题的原因。