我知道这取决于机器硬件,但例如,如果设置了100个进程,则默认队列也是100。这可能取决于空闲内存。有什么想法?
最好的答案是解释设置和一个或两个示例,假设服务器处理请求的时间为2-3秒。
提前感谢!
发布于 2013-12-06 16:42:20
为什么应该限制排队
任何没有被应用程序进程立即处理的请求都会被排队。排队通常是不好的:它通常意味着您的服务器不能足够快地处理请求。
队列越大,意味着请求被丢弃的可能性就越小。但这也有一个缺点:在繁忙时期,排队的人越多,访问者在看到响应之前必须等待的时间就越长。这会导致它们单击reload,使队列变得更长(它们之前的请求将留在队列中;操作系统直到尝试将数据发送回访问者时才知道它们已经断开连接),或者导致它们沮丧地离开。
因此,限制队列是一件好事。它限制了上述情况的影响。
您应该确保队列中的请求尽可能少。这可能意味着:
使您的应用程序更快(如果您的工作负载是CPU bound).
如果您无法阻止请求排队,那么下一个最好的做法是保持队列较短,并在达到队列限制时显示友好的错误消息。例如,“很抱歉,现在有很多人正在访问我们。请稍后再试。”The documentation for PassengerMaxRequestQueueSize会告诉你如何做到这一点。
队列大小的最佳值
很难说最优队列大小应该是多少。一个不错的经验法则是:将请求队列大小设置为一秒内可以处理的最大请求数。根据你的情况,你可能需要稍微调整一下。
这条经验法则来自预期突发流量的概念。您的服务器上预计会有多少个并发请求?
假设您的队列大小为100,无论出于何种原因,您都会同时收到150个请求。假设您的服务器足够快,可以在半秒内处理150个请求,因此您知道这不是性能问题。但是如果您的请求队列大小为100,那么其中的50个请求将被丢弃,并显示“请求队列已满”错误。
在这种情况下,您应该将队列大小设置为您认为可以安全地处理而不会出现性能问题的并发请求的最大数量。
发布于 2014-04-29 23:54:40
This SO about和Passenger docs here讨论了更多关于这方面的工作。如果您想了解服务器上发生这种情况的原因,可以尝试运行passenger-status (通常需要以根用户身份运行)。
如果您想在访问者看到此问题时设置一个自定义错误页面,您可以使用以下内容(在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.https://stackoverflow.com/questions/20402801
复制相似问题