首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sidekiq内存使用重置

sidekiq内存使用重置
EN

Stack Overflow用户
提问于 2015-09-03 19:54:33
回答 1查看 3.5K关注 0票数 4

我有Rails应用程序,它使用Sidekiq作为后台进程。要部署这个应用程序,我使用capistrano、ubuntu服务器和apache passenger。要启动和重新启动Sidekiq,我使用capistrano-sidekiq gem。我的问题是-当Sidekiq运行时,Sidekiq使用的内存量(RAM)正在增长。当Sidekiq完成所有进程(工作进程)时,它会一直持有大量RAM,并且不会对其进行重置。

代码语言:javascript
复制
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu    2035 67.6 45.4 3630724 1838232 ?     Sl   10:03 133:59 sidekiq 3.5.0 my_app [0 of 25 busy]     

如何让Sidekiq在工人完成工作后重置已用内存?

EN

回答 1

Stack Overflow用户

发布于 2015-12-25 18:47:30

Sidekiq使用线程来执行作业。线程与父进程共享相同的内存。因此,如果一个作业使用了大量内存,那么Sidekiq进程的内存使用量将会增长,并且不会被Ruby释放。

Resque使用另一种技术,它在另一个进程中执行每个作业,因此当作业完成时,作业的进程退出并释放内存。

防止Sidekiq进程使用过多内存的一种方法是使用Resque的forking方法。

您可以让您的作业主方法在另一个进程中执行,并等待该新进程退出

例如:

代码语言:javascript
复制
class Job
  include Process

  def perform
    pid = fork do
      # your code
    end
    waitpid(pid)
  end
end
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32374919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档