我们在 IIS 8.5 中运行了一个作为“网络花园”实现的某个应用程序,其中最大工作进程数 = 10。这样做的原因是长时间运行的请求、数据库和网络/异步密集型,以避免在非常繁忙的应用程序中填满工作进程的队列。
AppPool 适用于 NetCore 应用程序(无托管代码),提供 RESTful API,管道模式 = 集成。
我们试图弄清楚的是 IIS 如何确定何时触发要创建的额外工作进程。我们找不到任何文档或文章/帖子来解释是什么触发了对下一个工作进程的“需要”,直到达到配置的最大值。
我们无法真正理解 IIS 如何确定何时扩展工作进程,以便更好地调整其最大值。从目前的测试和观察来看,它似乎是奇怪的随机的,尽管有迹象表明“新请求”迟早会导致新的工作进程(即使请求量非常低,比如每 5 分钟一个请求)
从不同的测试中,我们注意到:
- 启动 AppPool 时,仅创建一个工作进程
- 对应用程序发出几个请求(比如说,不到 5 个)会导致第二个请求启动。这远低于队列长度(设置为默认值 1000)。
- 来自不同“客户端”的请求不会直接影响为每个新“客户端”启动新流程
- 调用应用程序内的不同方法/资源也不会触发新的工作进程。
- 在所有工作进程都处于空闲状态(3 个实例)一段时间后,对应用程序的新请求将导致创建第 4 个进程。这种模式会随着时间的推移不断重复,即使在最低负载下也是如此,最多可以达到 8 个工作进程,而所有这些进程几乎都不执行任何操作。
- WAS 或 IIS 的 EventLog 中没有任何事件显示这方面的详细信息,只有在创建新实例时才有几个 #1001“应用程序‘xxxxx’启动进程...”。
有什么线索吗?