【问题标题】:Unicorn: Which number of worker processes to use?独角兽:使用多少个工作进程?
【发布时间】:2012-06-18 20:37:34
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

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

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

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

    希望对你有帮助。

    【讨论】:

    • 非常感谢您提供的富有洞察力的答案以及您在编写本文时投入的时间。我觉得它很有帮助!
    • @blackbird07 不客气,很高兴能帮到你。祝内存优化好运。
    猜你喜欢
    • 2011-08-29
    • 2014-08-19
    • 1970-01-01
    • 2015-12-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多