4

我正在使用 resque gem 来处理我的后台进程。

我已经设置了三个队列,每个队列有一个工人。

任何人都可以解释内存是如何随着队列中工人的增加和减少而消耗的。

我听说每个工作人员都会加载单独的 Rails 环境。真的吗?

4

2 回答 2

2

据我所知,是的,每个工作人员都会启动一个单独的 Rails 环境,因此如果您有三个工作人员,您将加载三个 Rails 环境。拥有更多工人不会使您的队列变长,排队的工作数量将使其增长。

无论哪种方式,如果您没有任何主要理由拥有 3 个单独的工作人员,我建议您只为所有队列设置一个工作人员,并随着您的应用程序随时间扩展而将它们分开。

于 2011-08-29T08:15:34.140 回答
-3

这不是真的。正如我在此处的评论中解释的那样,Resque 的确切目标不是为每个工作人员加载 rails 环境(请参阅https://github.com/blog/542-introducing-resque)。

由于 ruby​​ 的绿色 trheading 解决方案造成的限制,您应该为每个处理器内核启动至少一个 worker 才能使用整个 CPU。这就是为什么 Resque 的默认行为是在单独的进程中启动每个 worker。这意味着同时启动 N 个并行进程,每个进程都独立加载完整的 gem 集。这是 Resque 和任何其他 Ruby 工具使用高内存的主要原因。您可以在这里看到如何使用 JVM 的本机线程使事情变得更好。

因此,如果您想降低 Resque 内存使用率,请尽可能降低工作人员的依赖性。并且始终使用像上帝或 Bluepill 这样的监控工具来密切关注这个过程是非常重要的。

于 2012-03-27T17:13:57.303 回答