IIS可以处理数以千计的AppPools / Worker进程吗?

时间:2016-12-13 07:51:04

标签: iis architecture microservices

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

服务器

  • Intel Xeon - X5550
  • 32GB Ram
  • Windows Server 2012 R2

<强>应用

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

  • 记忆(空闲)= ~5172 K
  • 记忆(跑步)= ~26 000 K

<强>制备

我创建了一些powershell脚本(抱歉无法在利用我们的闭源部署脚本时共享它):

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

<强>测试

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

Test Results

正如您将注意到的那样,我无法立即运行所有1000个。我遇到了一些事情:

  • 尝试向所有1000人发起呼叫,这样他们全部同时运行并不像听起来那么容易。
  • ASP.Net临时互联网文件位于C:\上,空间不足
  • 自从内存被分页以来,事情开始缓慢。

<强>结论

似乎IIS对进程数量没有限制。核心约束是机器上的资源。

有趣的是,所有应用程序都不可能以模拟方式运行,因此可以利用IIS将提供mem的事实