我对如何优化我的
Ruby on Rails 3.1.3应用程序的Unicorn设置感兴趣.我目前正在高cpu超大型实例上生成14个工作进程,因为我的应用程序似乎在负载测试期间受cpu限制.在模拟负载测试中,每秒大约20个请求重放请求,我的实例上的所有8个核心都达到峰值,并且盒子负载峰值达到7-8.每个独角兽实例使用大约56-60%的cpu.
我很好奇我有什么方法可以优化它?我希望能够将每秒更多的请求汇集到这个大小的实例上.与所有其他I / O一样,内存完全正常.在测试期间,cpu正在变得瘫痪.
解决方法
如果您是cpu绑定的,那么您希望不再使用独角兽进程,否则会使系统过载并降低调度程序的速度.您可以使用ab在开发框上测试它.你会注意到2个独角兽将胜过20(数量取决于核心,但概念将成立).
此规则的例外情况是您的IO绑定.在这种情况下,添加尽可能多的内存可以容纳的独角兽.
一个很好的性能技巧是将IO绑定请求路由到托管许多独角兽的不同应用服务器.例如,如果您有一个使用慢速SQL查询的请求,或者您正在等待外部请求,例如信用卡交易.如果使用Nginx,请为IO绑定请求定义上游服务器,将这些URL转发到包含40个独立单元的框. cpu绑定或非常快速的请求,转发到一个有8个独角兽的盒子(你说你有8个核心,但在aws上你可能想要尝试4-6,因为他们的调度程序被监控并且已经非常繁忙).
此外,我不确定你是否可以指望aws为你提供可靠的cpu使用率,因为你获得了一个不明显百分比的百分比.