Unicorn:要使用哪个工作进程数?

时间:2012-06-15 18:35:21

标签: ruby-on-rails performance optimization memory-management unicorn

我在虚拟Linux服务器上运行Ruby on Rails应用程序,其上限为1GB RAM。目前,我不断达到极限,并希望优化内存利用率。我正在考虑的一个选择是减少独角兽工人的数量。

那么确定使用的独角兽工人数量的最佳方法是什么?

目前的设置是10名工作人员,但我在Google Analytics Real-Time上看到的每秒最大请求数为3(仅在高峰时段获得一次;在99%的时间内不超过1个请求秒)。

这是一个保存假设,我现在可以 - 与4名工人一起,为意外数量的请求留出空间吗? 我应该在确定工作人员数量时使用哪些指标以及我可以在Ubuntu计算机上使用哪些工具?

1 个答案:

答案 0 :(得分:43)

您应该使用的工作人员数量在很大程度上取决于您的应用程序本身正在做什么以及它们在做这些事情的方式。对于它来说,确实没有一个完美的比率公式,它将适用于每一个测试用例。当您考虑到必须保留服务器的RAM数量有限这一事实时,情况会变得更加真实。

许多人会建议CPU核心数+ 1,但这也不正确。您将不得不在不同数量的工作人员中进行测试,并了解情况。务必定期检查日志。

在我们的团队中,我们使用名为Nagios的程序:http://www.nagios.org

它运行良好,可以检查您的服务器是否有许多可能发生的事情,甚至提醒您。在寻找完美平衡时,这可以帮到你很多。

此外,有时候你的服务器正在做的事情只是简单地运行rails实例,它可能正在运行脚本或处理不必要的信息。确保你的服务器没有做它不需要做的事情,这样你就可以节省很多cpu周期和RAM。

另外,请确保您正在实现Unicorn拥有的此功能,我们在项目中执行此功能并且非常宝贵:

  

记忆力增长当一个工人使用太多记忆时,上帝或monit可以   发送一个退出信号。这告诉工人在完成后死亡   当前的要求。一旦工人死亡,主人就会分叉   新的即时服务请求。通过这种方式我们   不必在请求中删除您的连接或启动   罚款。 - 摘自:https://github.com/blog/517-unicorn

我也发现这个类似的问题可以给你一些见解:

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

我希望有所帮助。