加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – sidekiq内存使用重置

发布时间:2020-12-17 02:48:47 所属栏目:百科 来源:网络整理
导读:我有Rails应用程序,它使用Sidekiq进行后台处理.要部署此应用程序,我使用capistrano,ubuntu服务器和apache乘客.要启动并重新启动Sidekiq,我使用capistrano-sidekiq gem. 我的问题是 – 当Sidekiq运行时,Sidekiq使用的内存量(RAM)正在增长.当Sidekiq完成所有进
我有Rails应用程序,它使用Sidekiq进行后台处理.要部署此应用程序,我使用capistrano,ubuntu服务器和apache乘客.要启动并重新启动Sidekiq,我使用capistrano-sidekiq gem.
我的问题是 – 当Sidekiq运行时,Sidekiq使用的内存量(RAM)正在增长.当Sidekiq完成所有进程(工作人员)时,它会保持大量RAM并且不会重置它.

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在工人完成工作后重置使用过的内存?

解决方法

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

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

防止Sidekiq进程使用太多内存的一种方法是使用Resque的分叉方法.

您可以在另一个进程中执行您的job main方法,并等待该新进程退出

例如:

class Job
  include Process

  def perform
    pid = fork do
      # your code
    end
    waitpid(pid)
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读