我计划拥有一个Rails应用程序,该应用程序具有非常内容丰富的交互式页面,许多用户将连接到该页面。
开发进展顺利,开发服务器上的小时间测试也顺利完成。
当我们开始使用选定的人群进行alpha测试时,问题就开始了。服务器突然停了下来。由于队列已满,Nginx将停止。我迷失了一段时间,但在环顾四周之后,得出的结论是,真人动作电脑完全占用了我的记忆。当用户多次重新加载订阅动作电影的页面时,这尤其会变坏,导致额外的过程变得活跃,完全停止服务器,只能通过nginx重启来治愈。
我目前运行2核1GB内存SSD运行VPS服务器进行alpha测试,可能在20个并发用户中排名第一。我应该遇到这样的负载性能问题吗?或者应该调整代码或redis,乘客解决这个问题?
我知道在没有更多具体细节的情况下很难说任何明确的事情,但是可以用信息来估算吗?
答案 0 :(得分:1)
20个并发用户加上每个用户的多个标签仍然少于大约100个并发的websocket连接,不是那么多。
我要寻找的第一件事是泄漏 - 当某些原因,当实际用户断开连接时,websocket连接或其他资源(打开文件等)不会被释放。确保您正在运行新版本的rails / passenger,因为rails中存在导致类似行为的错误(有关详细信息,请参阅https://blog.phusion.nl/2016/07/07/actioncable-under-stress-p1/)
同样,当ncx中的actioncable + passenger允许你在单个进程内运行所有内容时,当你期望一些负载时,这不是一个好主意。 当运行干净的nginx和单独的rails服务器以获得常规请求和电缆时 - 至少应用程序的其他部分将继续在这种情况下工作。
答案 1 :(得分:1)
经过一些游戏和测试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/