29

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

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

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

那么,我现在可以 - 与 4 名工人一起去,为意外数量的请求留出空间,这是一个节省的假设吗?我应该看看哪些指标来确定工人的数量,以及我可以在我的 Ubuntu 机器上使用哪些工具?

4

1 回答 1

44

您应该使用的工作人员数量很大程度上取决于您的应用程序本身在做什么以及它执行这些事情的频率。不幸的是,实际上并没有一个完美的比率公式适用于每个测试用例。当您考虑到您必须保持服务器运行的 RAM 数量有限这一事实时,这一点变得更加真实。

许多人会建议 CPU Core Count + 1 但这也不正确。您将不得不在存在不同数量的工人的情况下进行测试用例,然后看看事情进展如何。请务必定期检查日志。

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

它运行良好,可以检查您的服务器是否有可能发生的许多不同事情,甚至可以提醒您注意它们。当您试图找到完美的平衡时,这可以帮助您很多。

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

此外,请确保您正在实现 Unicorn 拥有的这个功能,我们在我们的项目中这样做,它是无价的:

内存增长当一个worker使用太多内存时,god或monit可以向它发送一个QUIT信号。这告诉工人在完成当前请求后死亡。一旦工人死亡,主人就会分叉一个新的,它可以立即为请求提供服务。通过这种方式,我们不必在请求中终止您的连接或受到启动惩罚。-- 取自:https ://github.com/blog/517-unicorn

我还发现了这个类似的问题,可以为您提供一些见解:

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

我希望这会有所帮助。

于 2012-06-16T22:32:36.267 回答