25

我在1GB RAM上限的虛擬Linux服務器上運行Ruby on Rails應用程序。目前,我不斷達到極限,並希望優化內存利用率。我看到的一個選擇是減少獨角獸工作者的數量。獨角獸:使用哪個工作進程數量?

那麼確定使用獨角獸工人數量的最佳方法是什麼?

當前設置爲10名工作人員,但我在Google Analytics Real-Time上看到的每秒請求數的最大數量爲3(僅在高峯時段得分1次; 99%的時間不超過1次每秒請求)。

那麼這是一個保存假設,我可以 - 現在 - 與4名工人一起工作,爲意外數量的請求留下空間? 我應該查看哪些指標來確定工作人員數量以及我可以在Ubuntu機器上使用哪些工具?

回答

42

您應該使用的工作人員數量很大程度上取決於您的應用程序本身在做什麼以及它如何做這些事情。真的沒有一個完美的比例公式,它不幸的會在每一個測試案例中起作用。如果考慮到您必須保持服務器運行的RAM數量有限,這一點變得更加真實。

許多人會建議CPU核心計數+1,但這是不正確的。你將不得不用不同數量的工作人員進行測試,並看看事情進展如何。請務必定期檢查日誌。

在我們的團隊,我們使用一個名爲Nagios的程序:http://www.nagios.org

它運作良好,並可以檢查你的服務器爲許多不同的事情可以發生,甚至提醒你給他們。當試圖找到完美的平衡時,這可以幫助你很多。

此外,有時您的服務器除了只是簡單地運行rails實例外,還有一些東西可能會運行腳本或處理不必要的信息。確保你的服務器沒有做它不需要做的事情,這樣可以節省很多CPU週期和RAM。

此外,還要確保你正在實現這個功能,獨角獸,我們做我們的項目,它是無價的:

內存增長當工人使用太多內存,神或monit的可以給 發送一個QUIT信號。在完成 當前請求後,這告訴工人死亡。一旦工人死亡,主人會立即索取 新的服務請求。通過這種方式,我們 不必中斷您的連接請求或採取啓動 的懲罰。 - 摘自:https://github.com/blog/517-unicorn

我也發現這個類似的問題,可以給你一些啓示:

https://serverfault.com/q/369811/110682

我希望幫助。

+0

非常感謝您提供有見地的答案和您投入到寫作的時間。我覺得它非常有幫助! – emrass

+0

@ blackbird07不客氣,我很高興能夠幫助你。內存優化祝你好運。 –