【问题标题】:Can IIS Handle Thousands of AppPools/Worker Processes?IIS 可以处理数以千计的 AppPools/Worker 进程吗?
【发布时间】:2017-02-13 17:42:55
【问题描述】:

我目前正在研究一种架构的可行性,在这种架构中,我们可能拥有数千个 AppPool,因此我们的每个微服务都在 IIS (10+) 中运行工作进程。 (这是几个选项之一)

我了解每个工作进程的开销。目前我的估计是每个工人大约 20-30MB。服务器资源不应该成为太大的问题,因为我们很可能会为服务器提供 32-64GB 的 RAM。除此之外,并非所有工作人员都会一直处于活动状态,因此我们应该在 AppPools 空闲时获得空间。

我的问题:IIS 可以处理这么多 AppPools/Worker 进程吗?

我看不出它不应该提供足够资源的原因,但是经过一些简短的搜索后,我无法找到任何有关它的文档。

【问题讨论】:

    标签: iis architecture microservices


    【解决方案1】:

    所以我会在这里添加一些我自己的问题的答案,因为我做了一些测试。

    服务器

    • 英特尔至强 - X5550
    • 32GB 内存
    • Windows Server 2012 R2

    应用程序

    使用单个控制器和操作创建了一个准系统 WebAPI 仅 ASP.Net 应用程序。 当安装在 IIS 中时,这是观察到的内存占用。

    • 内存(空闲)= ~ 5172 K
    • 内存(运行)= ~26 000 K

    准备

    我创建了一些 powershell 脚本(很抱歉,它们利用了我们的闭源部署脚本,因此无法共享它)来:

    • 创建 - 每个应用程序的唯一文件夹,以防止可能的资源共享
    • 启动 - 发出网络请求
    • 清理 - 删除所有应用程序、池和文件夹
    • 回收 - 卸载应用程序,将其设置回空闲状态

    测试

    以下是我从 PerfMon 观察到的结果

    您会注意到,我无法同时运行所有 1000 个。我遇到了一些事情:

    • 尝试向所有 1000 人发出呼叫以使它们同时运行并不像听起来那么容易。
    • ASP.Net 临时 Internet 文件位于 C:\ 空间不足
    • 由于内存被分页,事情开始缓慢运行。

    结论

    看来IIS确实对进程数没有限制。核心约束是机器上的资源。

    有趣的是,所有应用程序都不太可能模拟地运行,因此人们可以利用 IIS 将提供内存这一事实

    【讨论】:

    • 我知道这是个老问题,但您是否检查过处理器使用情况(尤其是空闲状态),我很好奇运行这么多应用程序池是否存在一些处理器开销
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2018-05-05
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多