Performance 如何配置IIS-10和FastCGI以实现高并发性?

Performance 如何配置IIS-10和FastCGI以实现高并发性?,performance,iis,fastcgi,iis-10,Performance,Iis,Fastcgi,Iis 10,场景:我们有一个PHP7Web应用程序,通过FastCGI使用IIS10。我们在应用程序上进行了性能测试,并注意到了性能下降。我们排除了数据库层。我们查看了IIS服务器,即使在负载很重的情况下,当应用程序速度急剧下降时,资源也不会紧张。。。没有CPU峰值没有RAM峰值。进一步挖掘,我们得出的结论是,所有传入的请求都只是在排队。当一些请求需要更长的时间(对于一些非常大的报告,需要1-3分钟),那么每个其他请求都会排队等待第一个请求通过 所以,问题是:我们应该在哪里增加IIS一次可以处理的并发请求的

场景:我们有一个PHP7Web应用程序,通过FastCGI使用IIS10。我们在应用程序上进行了性能测试,并注意到了性能下降。我们排除了数据库层。我们查看了IIS服务器,即使在负载很重的情况下,当应用程序速度急剧下降时,资源也不会紧张。。。没有CPU峰值没有RAM峰值。进一步挖掘,我们得出的结论是,所有传入的请求都只是在排队。当一些请求需要更长的时间(对于一些非常大的报告,需要1-3分钟),那么每个其他请求都会排队等待第一个请求通过

所以,问题是:我们应该在哪里增加IIS一次可以处理的并发请求的数量

我在FastCGI下找到了这些设置,但文档很少。有人能解释一下这四种设置的作用吗

  • 实例MaxRequests
  • 最大实例数
  • 队列长度
  • 快速受精卵

在DefaultAppPool下还有其他设置吗

  • 队列长度
  • 最大工作进程数
  • 回收利用

更新: 对于可能搜索此内容的其他人,应澄清以下几点:

  • 此上下文中的请求表示从浏览器到IIS服务器的一次调用
  • 我们使用jmeter进行一些基本的负载测试
  • 从浏览器到IIS服务器的请求(出于此上下文的考虑)将按如下方式处理:浏览器>DefaultAppPool worker process(如果要增加此值,在IIS look in web gardens中默认为1)>FastCGI实例(将其视为进程线程,语言非常复杂,web上的用户可以互换使用线程/进程/实例,这可能会让人困惑).FastCGI默认为4。因此,这意味着当5个并发请求通过时,它们都会通过1个DefaultAppPool工作进程,其中4个将由FastCGI并发处理,第5个将排队。我们测试了这一点:重新启动IIS后,将不会运行w3wp.exe或php-cgi.exe进程。当5个并发请求通过租赁请求进来:w3wp.exe将启动,它将生成4个php-cgi.exe进程(检查任务管理器)
  • 为了提高并发性,我们将FastCGI设置为“最大实例”设置为0,允许IIS根据可用资源决定要处理的数量,但您也可以将其设置为更高的特定数字。我们对此进行了测试,我相信这是准确的。您可以看到w2wp.exe进程和php-cgi.exe进程的数量随着请求的到来而增加
  • 您还应该能够增加DefaultAppPool工作进程,如果您将其设置为4,并将FastCGI实例保留为4,那么从理论上讲,这意味着每个工作进程将产生自己的4个FastCGI实例,总共4x4=16个并发请求。我还没有进行足够的测试,以确保100%正确事实上,这一切都结束了

实例MaxRequests:控制FastCGI进程回收行为。指定在回收进程之前允许FastCGI应用程序处理的最大请求数。默认值为200

Max Instances:指定所选FastCGI应用程序的应用程序进程池中允许的最大FastCGI进程数。此数字还表示FastCGI应用程序可以处理的最大并发请求数。默认值为4

队列长度:指定为FastCGI应用程序池排队的最大请求数。队列已满时,后续请求会向客户端返回HTTP错误代码503(服务不可用)。此错误代码表示应用程序太忙。默认值为1000

Rapid Failes PerMinute:指定向应用程序发出请求所允许的最长时间。如果FastCGI进程在单个请求上花费的时间超过指定时间,则该进程将终止。默认值为90秒

应用程序池

队列长度:向HTTP.sys指示在拒绝未来请求之前,要为应用程序池排队的请求数。默认值为1000

最大工作进程数:表示将用于应用程序池的最大工作进程数

有关回收中的属性,您可以参考以下链接:


在“最大实例”和“实例最大请求”的上下文中,什么是“请求”。它是否意味着:当用户加载一个页面时,这是一个请求?因此“最大实例”默认情况下,意味着只有4个页面加载被并发处理?因此,5个用户并发访问服务器意味着4个用户将立即得到服务,1个用户将排队?是的,你是对的。默认情况下,如果5个请求同时出现,4个FastCGI进程将启动以处理4个请求,一个请求必须等待。