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

emr*_*ass 27 optimization performance memory-management ruby-on-rails unicorn

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

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

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

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

de_*_*777 43

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

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

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

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

此外,有时您的服务器正在执行的操作除了简单地运行rails实例之外,它可能正在运行脚本或处理不必要的信息.确保您的服务器不执行不需要执行的操作,这样可以节省许多cpu周期和RAM.

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

记忆增长当一个工人使用太多记忆时,上帝或监狱可以发送一个退出信号.这告诉工人在完成当前请求后死亡.工人一旦死亡,主人就会立即拨打新的工作人员,立即提供服务.通过这种方式,我们不必在请求中断您的连接或采取启动惩罚.- 摘自:https://github.com/blog/517-unicorn

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

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

我希望有所帮助.