Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency Phusion PassengerMaxRequestQueueSize的最佳值是多少_Concurrency_Settings_Passenger - Fatal编程技术网

Concurrency Phusion PassengerMaxRequestQueueSize的最佳值是多少

Concurrency Phusion PassengerMaxRequestQueueSize的最佳值是多少,concurrency,settings,passenger,Concurrency,Settings,Passenger,我知道这取决于box硬件,但例如,如果设置了100个进程,默认队列也是100。增加到200或300有意义吗?这可能取决于可用内存。想法 最好的答案是解释设置和一两个示例,假设服务器处理请求的时间为2-3秒 提前谢谢 你为什么要限制排队 应用程序进程不能立即处理的任何请求都将排队。排队通常很糟糕:这通常意味着服务器无法足够快地处理请求 较大的队列意味着请求被丢弃的可能性较小。但这也有一个缺点:在繁忙时间,排队的人越多,访客在看到回应之前等待的时间就越长。这会导致他们单击“重新加载”,使队列更长(他

我知道这取决于box硬件,但例如,如果设置了100个进程,默认队列也是100。增加到200或300有意义吗?这可能取决于可用内存。想法

最好的答案是解释设置和一两个示例,假设服务器处理请求的时间为2-3秒

提前谢谢

你为什么要限制排队 应用程序进程不能立即处理的任何请求都将排队。排队通常很糟糕:这通常意味着服务器无法足够快地处理请求

较大的队列意味着请求被丢弃的可能性较小。但这也有一个缺点:在繁忙时间,排队的人越多,访客在看到回应之前等待的时间就越长。这会导致他们单击“重新加载”,使队列更长(他们以前的请求将保留在队列中;操作系统在尝试将数据发送回访问者之前不知道他们已断开连接),或者导致他们沮丧地离开

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

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

  • 使您的应用程序更快(如果您的工作负载受CPU限制)
  • 升级到更快的硬件(如果您的工作负载受CPU限制)
  • 增加应用程序的并发设置(如果您的工作负载受I/O限制),例如通过增加进程或线程的数量
如果无法阻止请求排队,那么下一个最好的方法是保持队列较短,并在达到队列限制时显示友好的错误消息。类似于“很抱歉,很多人正在访问我们。请稍后再试”的内容会告诉您如何做到这一点

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

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

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

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

因此,问题和乘客文档将详细介绍如何处理此问题。如果您想了解服务器上发生这种情况的原因,可以尝试运行
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.

当请求队列大小大于乘客\u max\u request\u queue\u size并开始向传入请求发送503错误时,是否有可能对事件设置回调?我希望在发生此类事件时收到通知(例如,有人试图使用ab实用程序访问DOS服务器)。目前不需要,但可以为此事件引入挂钩。我在这里提交了一个功能请求:值得注意的是,这些建议假设你的应用程序流量的主要驱动因素是人类。如果您运行的API具有更可预测/常规的请求负载,则可以根据您期望一次接收的最大请求数、处理请求所需的时间以及最长请求的可接受等待时间进行更精确的计算。值得尊敬的机器将等待30秒而不重新加载,如果您要求的话;)我相信将其设置为0不会禁用它,而是将其设置为无限。根据文档,值为“0表示队列是无界的。”