在New Relic中,它们显示为应用程序响应时间的一部分是“请求队列”。
要收集请求排队时间,您需要在开始排队时使用时间戳标记HTTP请求。 [1]
这是通过在Apache httpd.conf中添加一个HTTP头完成的:
RequestHeader set X-Request-Start "%t"
新遗物提到:
对于请求排队,站点操作员可以configuration更多的应用程序实例。
但是我们已经看到添加新的应用程序实例(即Web节点)不会影响请求排队时间 – 它保持不变。 我们看到这在250毫秒左右。
什么因素影响请求队列的长度,以及如何减less这个因素?
[1] http://support.newrelic.com/help/kb/features/tracking-front-end-time
我认为最好的办法是增加Apache Config中的“Server Limit”和“Max Clients”参数
这决定了Apache可以同时处理多less个线程。 如果您的“最大客户”值为100,则Apache可以同时处理多达100个请求。
也许值得注意的是,Apache对于小文件(文本,也许是CSS / JS等)是有好处的,但对像图片,video,Flash等大文件并不是那么好。这是因为每个人都需要一个新的请求(除非你正在使用保持活着,但是这并没有太多改善)。 因此,如果您有一个拥有49个外部资源(总共50个请求)的页面需要1秒钟的加载时间,并且您的最大客户端设置为100,那么在请求开始排队之前,您每秒只能处理两个页面视图。
您可以通过多种方式来解决这个问题,尝试将您的内容卸载到CDN(价格从大约0.10美元/ GB开始,但是如果您的数据传输量很高,可能值得与Edgecast或Akami联系,因为它们的定价要便宜得多块)。 这意味着您的服务器不必担心加载页面所需的任何静态资源,因此在上面的示例中,在请求开始排队之前,您现在每秒最多可以有100个页面浏览量。
如果你不想在CDN上掏钱,我会build议在你的服务器上获取两个IP地址,并将一个IP地址附加到Apache,一个IP地址附加到NGINX地址。 NGINX是一个非常高性能的服务器,能够处理比Apache多数千倍的连接,NGINX不像Apache那样使用请求排队,因为它是非阻塞的。 不幸的是,NGINX不具备Apache的所有function,例如,不能通过NGINX直接运行PHP,而无需代理Apache / FCGI / HipHop等。
作为附加,在你的问题中,你说“networking节点”,我认为你使用Apache作为这些节点的前端负载均衡器/代理服务器是正确的吗? 如果是的话,我build议你testing一下像NGINX,Varnish,HAProxy等,因为它们更适合做这样的事情,并处理同时连接。
–
编辑:
我认为这可能会让你对前端LB服务器感兴趣。
我们使用Apache作为代理跨越两台服务器的16个应用程序节点的前端。 代理服务器运行在一个四核英特尔酷睿i5服务器上(所以绝不符合规范)。 我们开始注意到请求数/秒和响应时间之间的抛物线关系。 在每秒约2000个请求时,CPU负载将会激增,每个响应需要约800ms才能完成,每个响应3000r / s需要约2秒。 我们切换到NGINX,我们已经达到了5000 r / s,而平均延迟仅为50ms,而CPU负载是Apache的四分之一。
显然,这完全取决于你的情况,你在做什么,你有什么资源,但我只是想我会给你我的意见=)
我不得不问一个明显的问题:文档指出你应该使用http标题X-Queue-Start(或者X-Queue-Time),但是你提到你正在使用X-Request-Start。 你是否添加了正确的标题?