什么是Phusion乘客PassengerMaxRequestQueueSize的最佳价值

时间:2013-12-05 14:37:52

标签: concurrency settings passenger

我知道这取决于盒子硬件,但是例如如果设置了100个进程,则默认队列也是100.将PassengerMaxRequestQueueSize增加到200或300是否有意义?这可能取决于免费记忆。想法?

最好的答案是解释设置,可能还有一两个例子,假设服务器处理请求2-3秒。

提前致谢!

2 个答案:

答案 0 :(得分:43)

为什么要限制排队

任何未由应用程序进程立即处理的请求都会排队。排队通常很糟糕:通常意味着您的服务器无法足够快地处理请求。

更大的队列意味着不太可能丢弃请求。但这有一个缺点:在繁忙时段,队列越大,访问者在看到响应之前必须等待的时间越长。这导致他们单击重新加载,使队列更长(他们之前的请求将保留在队列中;操作系统不知道他们已经断开连接,直到它尝试将数据发送回访问者),或导致他们离开挫折。

因此对队列进行限制是一件好事。它限制了上述情况的影响。

您应该确保请求尽可能少排队。这可能意味着:

  • 让您的应用更快(如果您的工作负载受CPU限制)。
  • 升级到更快的硬件(如果您的工作负载受CPU限制)。
  • 增加应用的并发设置(如果您的工作负载受I / O限制),例如通过增加进程或线程的数量。

如果无法阻止请求排队,那么接下来要做的最好的事情就是保持队列简短,并在达到队列限制时显示友好的错误消息。有点像,“我们很抱歉,很多人现在正在访问我们。请稍后再试。” The documentation for PassengerMaxRequestQueueSize告诉你如何做到这一点。

队列大小的最佳值

很难说最佳队列大小应该是多少。一个好的经验法则是:将请求队列大小设置为您可以在一秒钟内处理的最大请求数。根据您的情况,您可能需要稍微调整一下。

这个经验法则来自预期突发流量的概念。您期望在服务器上同时发出多少个请求?

假设您的队列大小为100,并且无论出于何种原因您同时收到150个请求 。假设您的服务器足够快,可以在半秒内处理150个请求,因此您知道这不是性能问题。但是,如果您的请求队列大小为100,那么其中50个请求将被丢弃,并显示“请求队列已满”错误。

在这种情况下,您应该将队列大小设置为您认为可以安全处理的最大并发请求数,而不会出现性能问题。

答案 1 :(得分:9)

This所以问题和乘客文档here更多地讨论如何使用它。如果您想了解有关服务器上发生这种情况的更多信息,可以尝试运行passenger-status(通常需要以root用户身份运行)。

如果您想在访问者看到此问题时设置自定义错误页面,您可以使用以下(在Apache中)设置自定义错误页面:

PassengerErrorOverride on
ErrorDocument 503  /error503.html

正如Hongli所提到的,您还可以将PassengerMaxRequestQueueSize设置更改为更高的数字以排队更多请求。您也可以将其设置为0并禁用它(对于大多数情况,这不是最佳解决方案)。

作为参考,您的网站访问者在遇到此限制时会看到的默认错误消息是:

This website is under heavy load

We're sorry, too many people are accessing this website at the same time. We're working on this problem. Please try again later.