我正在使用resque gem处理我的后台进程。
我已经设置了三个队列,每个队列都有一个工作人员。
任何人都可以解释如何通过增加和减少队列中的worker来消耗内存。
我听说每个工作人员加载单独的Rails环境。这是真的吗?
答案 0 :(得分:2)
据我所知,是的,每个工作者都启动一个单独的Rails环境,所以如果你有三个工作者,你将加载三个Rails环境。 拥有更多工作人员不会让您的队列变得更长,排队的工作数量将使其增长。
无论哪种方式,如果您没有任何主要原因需要3名独立的工作人员,我建议您只为所有队列配备一名工作人员,并将其分开,因为您的申请会随着时间的推移而缩放。
答案 1 :(得分:-3)
这不是真的。正如我在此处的评论中所解释的,Resque的确切目标不是为每个工作者加载rails环境(参见https://github.com/blog/542-introducing-resque)。
由于ruby的绿色trheading解决方案造成的限制,您应该为每个处理器核心启动至少一个工作程序才能使用整个CPU。这就是Resque的默认行为是在单独的进程中启动每个worker的原因。这意味着同时启动N个并行进程,每个进程都独立加载完整的gem集。这是Resque和任何其他Ruby工具使用高内存的主要原因。您可以看到here如何使用JVM使用本机线程来改善。
因此,如果您希望保持Resque内存使用率不变,请尽可能降低工作人员的依赖性。使用像God或Bluepill这样的监控工具来监控整个过程始终非常重要。