phy*_*lis 1 ruby-on-rails nginx unicorn
我有一个在Nginx + Unicorn环境中运行的rails应用程序
我看到他们的配置文件中都有"worker_processes",我想知道什么是最佳配置
如果我有4个核心,我应该为它们放4个核心吗?或1为nginx和4为独角兽?
(顺便说一下,我也在使用sidekiq,那么sidekiq并发呢?)
Nginx是基于事件的服务器.这意味着1个操作系统(OS)进程可以管理非常多的连接.这是可能的,因为通常的连接状态是等待的.连接等待另一端或发送/接收数据包时 - nginx可以处理其他连接.一个nginx工作者可以使用数千甚至数万个连接.所以,甚至worker_processes 1也足够了.
更多nginx的工作者允许使用更多的CPU核心(如果nginx是主要的CPU用户,这可能很重要).如果nginx执行大量磁盘IO,那么更多的工作人员也会很好.
恢复:您可以从1个工作人员安全启动并增加到CPU核心数.
Unicorn的工作者与nginx略有不同,因为一个worker =一个请求.unicorn worker的数量显示了同一时间执行的ruby进程数量.这个数字取决于您的申请.
例如,您的应用程序受CPU限制(仅进行一些数学运算).在这种情况下,大于CPU核心数的工作人员数量可能会导致问题.
但通常应用程序使用一些数据库并在等待数据库答案时休眠.如果我们的数据库放在其他服务器上(请求处理不吃我们的CPU) - ruby将睡眠并且CPU空闲.在这种情况下,我们可以增加CPU*3 ... CPU*5甚至CPU*20工人的工人数量.
简历:找到这个数字的最佳方式 - 加载真实应用程序的测试.设置unicorn worker的数量,以相同的并发数启动负载测试.如果服务器感觉良好 - 增加工人数量并再次测试.
sidekiq的并发性类似于独角兽工人.如果任务是CPU绑定的 - 设置接近CPU数量的踏板数.如果I/O绑定 - 线程数可以大于CPU核心数.此外,此服务器的其他任务很重要(如独角兽).请记住,如果你在unicorn的同一台服务器上运行sidekiq,那么CPU内核的数量不会改变:)
简历:与独角兽相同.
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |