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

kod*_*ode 28 concurrency settings passenger

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

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

提前致谢!

Hon*_*gli 44

为什么你应该限制排队

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

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

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

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

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

如果您无法阻止请求排队,那么下一个要做的最好的事情就是保持队列短路,并在达到队列限制时显示友好的错误消息.有点像,"我们很抱歉,很多人现在正在访问我们.请稍后再试." PassengerMaxRequestQueueSize的文档告诉您如何执行此操作.

队列大小的最佳值

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

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

假设您的队列大小是100,而不管是什么原因,你收到150个请求在同一时间.假设您的服务器足够快,可以在半秒内处理150个请求,因此您知道这不是性能问题.但是,如果您的请求队列大小为100,那么将丢弃其中50个请求,并显示"请求队列已满"错误.

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


Sna*_*hot 9

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

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

PassengerErrorOverride on
ErrorDocument 503  /error503.html
Run Code Online (Sandbox Code Playgroud)

正如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.
Run Code Online (Sandbox Code Playgroud)

  • 我认为将其设置为0不会禁用它,它会将其设置为无限.根据https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_request_queue_size上的文档,"值为0表示队列无限制." (3认同)