ruby-on-rails - 使用工头从网络设置 unicorn worker 的数量与从 unicorn 本身设置

标签 ruby-on-rails unicorn foreman

我有点犹豫如何从工头设置中设置 unicorn worker 的数量

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

然后在运行时 foreman start -c web=16

或 unicorn ,只需设置worker_processes 16

如果我在设置 worker_process=2 的同时设置 foreman start -c web=8 ,这意味着它总共只会运行 16

这只是一种偏好还是有什么我不明白的地方?有人可以解释一下吗?

最佳答案

foreman start -c web=16 每次 fork 时将启动 16 个主 unicorn 进程,但默认情况下会设置许多工作进程。

foreman start -c web=1 同时将worker_processes设置为16将启动一个主 unicorn 进程,该进程将 fork 16个工作进程。

主要区别在于您让谁控制流程。 unicorn master 进程的构建理念是跟踪其 fork 进程并了解它们何时被挂起等,以便进行清理和重新启动。 foreman 进程只知道主 unicorn 进程,而不知道主 unicorn 进程派生的任何进程。

unicorn 机架服务器专门用于替换运行多个进程(例如 4 个瘦服务器),而是运行单个主进程并让它处理 fork 工作进程的管理。这允许单个进程了解为机架应用程序提供服务的所有其他进程。

简而言之 - 运行单个 unicorn 进程并在配置文件中添加工作人员数量。别让工头干这事。

关于ruby-on-rails - 使用工头从网络设置 unicorn worker 的数量与从 unicorn 本身设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15072821/

相关文章:

ruby-on-rails - 在页面上查找匹配 HREF 模式的链接

node.js - 如何将 nodemon/grunt 与 .env 文件一起使用?

ruby-on-rails-3 - QUEUE=* 未找到工头错误

ruby - 从 gitlab 6.0 升级到 6.2 后 Unicorn 没有启动

ruby-on-rails - log/production.log 文件存在但为空

ruby-on-rails - 为什么我在系统启动的时候启动unicorn会报错?

ruby - 如何监控ruby进程?

ruby-on-rails - if 语句在 nil 时隐藏通知

ruby-on-rails - 即使照片确实上传,Carrierwave 也会返回 406 Not Acceptable

ruby-on-rails - 抽取 Assets :precompile aborts after CSS3 animation