场景:我们有一个通过FastCGI使用IIS10的php7Web应用程序。2我们对应用程序进行了性能测试,发现速度变慢了。3我们排除了数据库层。4我们查看了IIS服务器,即使在负载很重的情况下,当应用程序速度急剧变慢时,资源不会紧张...没有CPU峰值,没有RAM峰值。进一步挖掘我们得出的结论是,所有进来的请求都只是在排队。(对于一些需要1 - 3分钟的非常大的报告)则每隔一个请求排队等待第一个请求通过。
所以,问题是:我们应该从哪里着手来增加IIS一次可以处理的并发请求的数量?
我已经在FastCGI下找到了这些设置,但是文档很少。有人能解释一下这四个设置是做什么的吗?
- 示例最大请求数
- 最大示例数
- 队列长度
- 每分钟快速失败
在DefaultAppPool下,我们还应该查看其他设置吗?
- 队列长度
- 最大工作进程数
- 回收
更新:有几件事应该澄清其他谁可能会搜索这个:
- 在此上下文中,请求表示从浏览器到IIS服务器的一次调用
- 我们使用jmeter https://jmeter.apache.org/执行一些基本的负载测试
- 从浏览器到IIS服务器的请求(为了这个上下文)将被如下处理:浏览器〉DefaultAppPool工作进程(如果您想增加此值,则在IIS中默认为1,请查看Web花园)〉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根据可用资源决定要处理的数量,但您也可以将其设置为一个特定的更高的数字。2我们测试了这个数字,我相信它是准确的。3您可以看到w2wp.exe进程和php-cgi.exe进程的数量随着请求的到来而增加。
- 您还应该能够增加DefaultAppPool工作进程,如果您将其设置为4,并将FastCGI示例也保留为4,这应该意味着,理论上,每个工作进程将生成其自己的4个FastCGI示例,总共4x4 = 16个并发请求。我还没有进行充分的测试,以100%确保这是如何实际运行的。
2条答案
按热度按时间8ehkhllq1#
示例最大请求数:控制FastCGI进程回收行为。指定在回收进程之前允许FastCGI应用程序处理的最大请求数。默认值为200。
最大示例数:指定所选FastCGI应用程序的应用程序进程池中允许的FastCGI进程的最大数目。此数目还表示FastCGI应用程序可以处理的并发请求的最大数目。默认值为4。
队列长度:指定为FastCGI应用程序池排队的最大请求数。当队列已满时,后续请求将向客户机返回HTTP错误代码503(服务不可用)。此错误代码指示应用程序忙碌。默认值为1000。
每分钟快速失败次数:指定允许向应用程序发出请求的最长时间。如果FastCGI进程在单个请求上花费的时间超过指定时间,则将终止该进程。默认值为90秒。
应用程序池:
队列长度:向HTTP.sys指示在拒绝将来的请求之前要为应用程序池排队的请求数。默认值为1000。
最大工作进程数:指示将用于应用程序池的最大工作进程数。
有关回收中的属性,您可以参考此链接:
https://learn.microsoft.com/en-us/iis/configuration/system.applicationhost/applicationpools/add/recycling/
lawou6xi2#
如果你说:
进一步挖掘,我们得出的结论是,所有进来的请求都只是在排队。当一些请求需要更长的时间(对于一些非常大的报告,需要1-3分钟),那么每一个其他的请求都在排队等待第一个通过。
如果一个会话是真的,它也可能是php的会话处理程序如果你使用php会话,并且默认配置是文件,你将遇到描述的问题,因为第一个请求锁定了会话文件,第二个请求必须等到释放
你可以,例如使用另一个会话处理程序,我很长时间喜欢wincache,现在我使用memcached.这两个都可以用作会话保存处理程序,并且都是非阻塞的