Performance 如何配置IIS-10和FastCGI以实现高并发性?
场景:我们有一个PHP7Web应用程序,通过FastCGI使用IIS10。我们在应用程序上进行了性能测试,并注意到了性能下降。我们排除了数据库层。我们查看了IIS服务器,即使在负载很重的情况下,当应用程序速度急剧下降时,资源也不会紧张。。。没有CPU峰值没有RAM峰值。进一步挖掘,我们得出的结论是,所有传入的请求都只是在排队。当一些请求需要更长的时间(对于一些非常大的报告,需要1-3分钟),那么每个其他请求都会排队等待第一个请求通过 所以,问题是:我们应该在哪里增加IIS一次可以处理的并发请求的数量 我在FastCGI下找到了这些设置,但文档很少。有人能解释一下这四种设置的作用吗Performance 如何配置IIS-10和FastCGI以实现高并发性?,performance,iis,fastcgi,iis-10,Performance,Iis,Fastcgi,Iis 10,场景:我们有一个PHP7Web应用程序,通过FastCGI使用IIS10。我们在应用程序上进行了性能测试,并注意到了性能下降。我们排除了数据库层。我们查看了IIS服务器,即使在负载很重的情况下,当应用程序速度急剧下降时,资源也不会紧张。。。没有CPU峰值没有RAM峰值。进一步挖掘,我们得出的结论是,所有传入的请求都只是在排队。当一些请求需要更长的时间(对于一些非常大的报告,需要1-3分钟),那么每个其他请求都会排队等待第一个请求通过 所以,问题是:我们应该在哪里增加IIS一次可以处理的并发请求的
- 实例MaxRequests
- 最大实例数
- 队列长度
- 快速受精卵
- 队列长度
- 最大工作进程数
- 回收利用
- 此上下文中的请求表示从浏览器到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%正确事实上,这一切都结束了
在“最大实例”和“实例最大请求”的上下文中,什么是“请求”。它是否意味着:当用户加载一个页面时,这是一个请求?因此“最大实例”默认情况下,意味着只有4个页面加载被并发处理?因此,5个用户并发访问服务器意味着4个用户将立即得到服务,1个用户将排队?是的,你是对的。默认情况下,如果5个请求同时出现,4个FastCGI进程将启动以处理4个请求,一个请求必须等待。