c# - Windows Server 2012 内存限制上的 IIS 工作进程

标签 c# asp.net iis

我有一个在 Windows Server 2012 下托管的 IIS 上运行的 ASP.NET 4.0 应用程序,总物理内存为 8 GB。

我注意到,随着用户登录到应用程序并执行他们的任务,IIS 工作进程 的大小显着增加。

我真的不知道如何设置这个应用程序以避免内存中断或应用程序崩溃。

我的问题是,在具有 8GB RAM 的 Windows Server 2012 上,IIS 工作进程 可以达到的最大大小是多少?

您建议我在32 位 模式或64 位 模式下运行应用程序池吗?

你建议我使用 Web Gardening(增加 IIS 工作进程的数量)吗?使用此选项有什么副作用?

最佳答案

这个问题很广泛,但我认为可以部分回答。

  1. 可能的内存泄漏 - 如果 w3wp 进程内存(提交大小或内存)继续增加,即使用户数量不再增加,也可能会泄漏内存。检查this question了解更多详情

  2. 应用程序池内存限制 - 可以为每个应用程序池配置工作进程的最大允许内存 -> 回收条件 -> 基于内存的最大值。当达到此内存限制时,将回收应用程序池(发送关闭事件并在 Shutdown Limit(默认为 90 秒)后执行实际关闭)

  3. 没有应用程序池内存限制 - 在这种情况下,我认为限制将取决于 .NET 进程可以在您的特定体系结构上分配多少内存。使用来自 here 的信息,在您的特定情况下,内存限制应为 RAM + 页面文件的 70%

但是,如果内存使用率很高,您还应该考虑以下因素:

  • 垃圾收集 - 当内存使用率相当高并且 GC 介入时,拼命回收内存,应用程序性能可能会大大降低
  • 并发内存消耗 - 如果您有其他需要大量内存的进程(例如 Reporting Server),您应该考虑为您的应用程序池明确设置内存上限
  • 如何检查应用程序池是否因内存限制而关闭 - 不完全确定,但我认为 HostingEnvironment 值作为应用程序池被回收时发送的原因由于内存最大范围。检查this answer了解如何在您的应用程序中连接事物以捕获应用程序池关闭启动。

关于c# - Windows Server 2012 内存限制上的 IIS 工作进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128481/

相关文章:

javascript - 输入文本的高亮部分

c# - 创建自签名 CA 证书并在 IIS 中安装

c# - 为什么路径正在改变

c# - 回发时添加了用户控件,但不显示

c# - 防止复选框被选中(而不是简单地取消选中)

javascript - 具有自动转换功能的垂直转盘

node.js - 通过 SSL 托管在 IIS 上的 NodeJS Express API 返回错误 : unable to verify the first certificate

iis - SignalR 连接挂起,大约 30 秒后调用客户端

c# - 构建 RSA 加密服务提供者是持久化还是泄露 key 数据?

c# - 我可以要求 child 初始化在其父类中声明的变量吗?