2016-09-07 153 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

相關問題