在生产中使用 ActionCable 时会出现性能问题吗?
Could performance issues imerge when using ActionCable in Production?
我打算开发一个 Rails 应用程序,它有一个内容非常丰富的交互式页面,许多用户将连接到该页面。
开发进展顺利,在开发服务器上进行的短时间测试也顺利进行。
当我们开始对选定的人群进行 alpha 测试时,问题就出现了。服务器会突然停止。 Nginx 会因为队列已满而停止。我有一段时间不知所措,但环顾四周后得出的结论是,live actioncable 完全耗尽了我的 memory.This 尤其是当用户多次重新加载订阅 actioncable 的页面时变得更糟,导致额外的进程变为活动状态,完全停止服务器,只能通过重新启动 nginx 来治愈。
我目前 运行 一个 2core 1GB 内存的 SSD 运行 VPS 服务器用于 alpha 测试,可能在 top 20 并发 users.Should 我是 运行ning进入这种负载的性能问题?或者应该调整代码或 redis,passenger 解决这个问题?
我知道如果没有更具体的细节就很难说出任何明确的事情,但是可以用这些信息做一个大概的估计吗?
20 个并发用户加上每个用户的多个选项卡仍然少于大约 100 个并发 websocket 连接,并没有那么多。
我要寻找的第一件事是泄漏 - 当实际用户断开连接时,由于某种原因 websocket 连接或其他资源(打开的文件等)没有被释放。请确保您 运行 正在使用 rails/passenger 的新版本,因为 rails 中存在导致类似行为的错误(有关详细信息,请参阅 https://blog.phusion.nl/2016/07/07/actioncable-under-stress-p1/)
此外,虽然 nginx 中的 actioncable+passenger 允许您 运行 单个进程中的所有内容,但当您期望一些负载时,这不是一个好主意。
当 运行 为常规请求和电缆设置干净的 nginx 和单独的 rails 服务器时 - 至少应用程序的其他部分将在这种情况下继续某种工作。
经过一些 gogoling 和测试 Nginx 设置后,将此指令添加到 passenger 的 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/
我打算开发一个 Rails 应用程序,它有一个内容非常丰富的交互式页面,许多用户将连接到该页面。
开发进展顺利,在开发服务器上进行的短时间测试也顺利进行。
当我们开始对选定的人群进行 alpha 测试时,问题就出现了。服务器会突然停止。 Nginx 会因为队列已满而停止。我有一段时间不知所措,但环顾四周后得出的结论是,live actioncable 完全耗尽了我的 memory.This 尤其是当用户多次重新加载订阅 actioncable 的页面时变得更糟,导致额外的进程变为活动状态,完全停止服务器,只能通过重新启动 nginx 来治愈。
我目前 运行 一个 2core 1GB 内存的 SSD 运行 VPS 服务器用于 alpha 测试,可能在 top 20 并发 users.Should 我是 运行ning进入这种负载的性能问题?或者应该调整代码或 redis,passenger 解决这个问题?
我知道如果没有更具体的细节就很难说出任何明确的事情,但是可以用这些信息做一个大概的估计吗?
20 个并发用户加上每个用户的多个选项卡仍然少于大约 100 个并发 websocket 连接,并没有那么多。
我要寻找的第一件事是泄漏 - 当实际用户断开连接时,由于某种原因 websocket 连接或其他资源(打开的文件等)没有被释放。请确保您 运行 正在使用 rails/passenger 的新版本,因为 rails 中存在导致类似行为的错误(有关详细信息,请参阅 https://blog.phusion.nl/2016/07/07/actioncable-under-stress-p1/)
此外,虽然 nginx 中的 actioncable+passenger 允许您 运行 单个进程中的所有内容,但当您期望一些负载时,这不是一个好主意。 当 运行 为常规请求和电缆设置干净的 nginx 和单独的 rails 服务器时 - 至少应用程序的其他部分将在这种情况下继续某种工作。
经过一些 gogoling 和测试 Nginx 设置后,将此指令添加到 passenger 的 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/