我对优化Ruby on Rails 3.1.3应用程序的 unicorn 设置的方法感兴趣。我目前在High-CPU Extra Large Instance上生成14个工作进程,因为我的应用程序似乎在负载测试期间受CPU约束。在模拟负载测试中,每秒约有20个请求重播请求,我实例上的所有8个内核都达到了峰值,并且框负载峰值达到7-8。每个 unicorn 实例都使用约56-60%的CPU。

我很好奇,有什么方法可以优化此效果?我希望能够每秒将更多请求集中到此大小的实例上。内存与其他所有I/O完全一样。在测试过程中,CPU陷入瘫痪。

最佳答案

如果您受CPU限制,则不希望使用比内核更多的 unicorn 进程,否则将使系统过载并减慢调度程序的速度。您可以使用ab在开发盒上对此进行测试。您会注意到,有2个 unicorn 的表现将超过20个(数量取决于核心,但是这个概念仍然成立)。

此规则的异常(exception)是您的IO是否绑定(bind)。在这种情况下,添加尽可能多的 unicorn 即可容纳内存。

一个好的性能技巧是将IO绑定(bind)请求路由到托管许多 unicorn 的其他应用服务器。例如,如果您有使用慢速SQL查询的请求,或者您在等待外部请求(例如信用卡交易)。如果使用nginx,则为IO绑定(bind)请求定义上游服务器,将这些URL转发到具有40个 unicorn 的盒子中。 CPU限制或速度非常快的请求,请转至带有8个 unicorn 的盒子(您说您有8个内核,但是在aws上,您可能要尝试4-6个,因为它们的调度程序已经过管理,并且已经很忙了)。

另外,我不确定您是否可以依靠aws为您提供可靠的CPU使用率,因为您所获得的百分比是晦涩的。

关于ruby-on-rails - 负载测试期间 unicorn CPU使用率激增,优化方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11182975/

10-13 07:14