c# - 编码以改进 IIS 应用程序池内存使用

标签 c# asp.net iis webforms

我们有两个相同的负载平衡网络服务器(ws1 和 ws2)服务于同一个网站。目前两者都有一些爬虫,可以爬取 PDF 和包含大量图像的页面(平均每页 25 张)。两台服务器之间大约有 60 个并发用户,但到目前为止,爬虫发出的请求最多。 ws1 上的 IIS 应用程序池消耗约 500mb RAM,而 ws2 上的应用程序池消耗约 2gb RAM(每台服务器上可用 4gb)。这些消耗水平已经持续了几个小时。我已将 IIS 配置为执行静态缓存和静态压缩,但我认为这不会影响 RAM 消耗。

问题是 ws2 的 RAM 几乎用完了,该服务器上的网页加载速度比 ws1 慢得多,这对我们的最终用户不利。

我的问题:

  • 50% 的可用 RAM(在 ws2 上约为 2gb)对于应用程序池来说似乎要消耗很多 - 是吗?
  • 我是否应该考虑任何编程/配置以帮助服务器更好地管理其资源(尤其是 RAM),尤其是在涉及更大的请求(如 PDF 和图像)时?

我知道这在这一点上非常通用。我不知道包含哪些其他信息会有帮助,所以请留下反馈,以便我可以用更详细的信息更新此问题。

最佳答案

最好的起点是确定什么正在使用所有内存。商业剖析器喜欢

http://www.red-gate.com/products/ants_performance_profiler/index.htm

http://www.jetbrains.com/profiler/

可以分析您在 IIS 中运行的代码。如果您可以在您的开发环境中重现该问题,Visual Studio 的内存分析器也应该能够诊断内存使用情况(也许有一种方法可以单独使用它来对抗生产 IIS 实例……不确定)。

检查您的应用程序分配了哪些内存以及用途。

关于c# - 编码以改进 IIS 应用程序池内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13827719/

相关文章:

c# - 过程或函数 [sproc_name] 需要参数 '@materials' ,但未提供

c# - 我的抽象基础 MembershipProvider 在哪里?

c# - 替换在某些情况下不起作用

c# - 将我的 DataContext 存储在 session 内存中是个好主意吗?

c# - ASP.NET MVC 项目中某些请求的巨大延迟

c# - 当客户端请求具有自签名证书时,为什么我的 Application_BeginRequest() 没有被调用?

c# - ServiceStack 不会自动连接和注册 AppSettings

c# - .net 4 xslt 转换扩展功能损坏

c# - 从 Web.Config 引用命名空间

c# - WebApplication 在 IIS Express 上运行良好,但在本地 IIS 上运行不正常