2016-09-07 138 views
2

我打算开发一个Rails应用程序,它有一个内容丰富的交互式页面,许多用户将连接到该页面。在生产中使用ActionCable时,性能是否会影响?

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

当我们开始对所选人群进行alpha测试时,就出现了问题。该服务器会突然停下来。由于队列已满,Nginx将停止。我有一段时间输了,但在四处看后,得出的结论是,实时行为线索完全消耗了我的记忆。当用户多次重新加载订阅actioncable的页面时,这尤其变得糟糕,导致额外的过程变得活跃,完全停止服务器,只有通过nginx重启才能治愈。

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

我知道很难说没有更具体的任何明确的东西,但是可以用信息做出估计吗?

回答

1

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

我想要的第一件事是泄漏 - 当由于某种原因websocket连接或其他资源(打开的文件等)在实际用户断开连接时不会被释放。确保你运行rails/passenger的新版本,因为轨道中存在导致类似行为的错误(详情请参阅https://blog.phusion.nl/2016/07/07/actioncable-under-stress-p1/

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

+0

谢谢你的建议,我看到那篇文章也是如此,并认为这可能是它,但我的Rails(5.0.0.1)和乘客(5.0.30 )是最新的版本。这似乎主要发生在有人快速重新加载页面的时候。此外,在这种情况下,分离过程也会产生很大的影响。 – Saifis

相关问题