【问题标题】:Could performance issues imerge when using ActionCable in Production?在生产中使用 ActionCable 时会出现性能问题吗?
【发布时间】:2017-01-15 03:44:01
【问题描述】:

我正计划开发一个 Rails 应用程序,该应用程序具有内容丰富的交互式页面,许多用户都会连接到该页面。

开发进展顺利,开发服务器上的小时间测试也顺利进行。

当我们开始对选定的人群进行 Alpha 测试时,问题就开始了。服务器会突然停止。 Nginx 会因为队列已满而停止。我一时不知所措,但环顾四周后,得出的结论是 live actioncable 完全耗尽了我的记忆。当用户多次重新加载订阅 actioncable 的页面时,这尤其糟糕,导致额外的进程变为活动状态,完全停止服务器,只有通过 nginx 重启才能治愈。

我目前运行 2 核 1GB 内存 SSD 运行 VPS 服务器进行 alpha 测试,可能在 20 名并发用户之前。我应该在这样的负载下遇到性能问题吗?还是应该调整代码或redis,乘客解决这个问题?

我知道如果没有更多细节,很难说任何确定的事情,但是可以根据这些信息进行大致估计吗?

【问题讨论】:

    标签: ruby-on-rails performance nginx passenger actioncable


    【解决方案1】:

    经过一些 gogoling 和测试 Nginx 设置后,将此指令添加到乘客的 nginx 设置中似乎显着改善了性能问题。

       location /special_websocket_endpoint {
           passenger_app_group_name foo_websocket;
           passenger_force_max_concurrent_requests_per_process 0;
       }
    

    更多信息在这里

    https://www.phusionpassenger.com/library/config/nginx/tuning_sse_and_websockets/

    【讨论】:

      【解决方案2】:

      20 个并发用户加上每个用户多个选项卡仍然少于大约 100 个并发 websocket 连接,不是那么多。

      我首先要寻找的是泄漏——当实际用户断开连接时,由于某种原因,websocket 连接或其他资源(打开的文件等)没有被释放。确保您运行的是新版本的 rails/passenger,因为 rails 中存在导致类似行为的错误(有关详细信息,请参阅 https://blog.phusion.nl/2016/07/07/actioncable-under-stress-p1/

      此外,虽然 nginx 中的 actioncable+passenger 允许您在单个进程中运行所有内容,但当您期望一些负载时,这不是一个好主意。 当为常规请求和电缆运行干净的 nginx 和单独的 rails 服务器时 - 至少应用程序的其他部分将在这种情况下继续某种工作。

      【讨论】:

      • 感谢您的建议,我也看到了那篇文章,并认为可能是它,但是我的 Rails(5.0.0.1) 和 Passenger(5.0.30) 是最新版本。这似乎主要发生在有人快速重新加载页面时。此外,在这种情况下,分离进程会带来很多好处。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2012-06-30
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多