为什么响应时间比服务器上的处理请求慢100倍?

时间:2019-02-28 13:45:06

标签: google-cloud-platform

我在us-east1-b区域中有一台计算机引擎服务器。 n1-highmem-4(4个vCPU,26 GB内存)和50 GB SSD,一切都在监视图中显示正常。

我们正在将此服务器用作基于Rails的RESTful API。

问题是,当我们向服务器发送请求时,需要很长时间才能收到响应。

这是我们的服务器日志: 如您所见,回复请求花了00:01秒 enter image description here

,这是邮递员收到的回复: 如您所见,X-Runtime是预期的0.036319,但我们在50374毫秒内收到了响应,这意味着服务器响应后将近1分钟!  enter image description here

1 个答案:

答案 0 :(得分:0)

我希望这个答案可以帮助有同样问题的人。 乘客高度优化的负载均衡器假定Ruby应用程序可以处理1个(或线程限制的数量)并发连接。通常是这种情况,并导致最佳的负载平衡。但是处理SSE / Websocket的端点可以处理更多的并发连接,因此这种假设会导致性能下降。

您可以使用“每个进程配置最大强制并发请求数”选项来覆盖此选项。下面的示例显示如何将/ special_websocket_endpoint的并发设置为无限制:

server {
   listen 80;
   server_name www.example.com;
   root /webapps/my_app/public;
   passenger_enabled on;

   # Use default concurrency for the app. But for the endpoint
   # /special_websocket_endpoint, force a different concurrency.
   location /special_websocket_endpoint {
       passenger_app_group_name foo_websocket;
       passenger_force_max_concurrent_requests_per_process 0;
   }
}
  

在旅客5.0.21及以下版本中,以上选项尚不可用。在这些版本中,有针对Ruby应用程序的解决方法。在config.ru中输入以下代码以设置并发(在整个应用程序中)。