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 forking方法。
您可以在另一个进程中执行您的作业main方法,并等待该新进程退出
例如:
class Job include Process def perform pid = fork do # your code end waitpid(pid) end end
- 在Ruby中,模块中定义的类如何知道模块的常量?
- Ruby使用RegEx 在字符串中查找完整的数学表达式
- 为什么在读取文本文件时出现“UTF-8中的无效字节序列”错误?
- Ruby-在O(log n)运行时从sorted(唯一)数组中删除一个值
- vagrant plugin安装错误`gem install little-plugger -v’1.1.4’`在捆绑之前成功
- 如何编写Rake任务将数据导入Rails应用程序?
- 在Rails ActiveRecord Query中返回自定义列
- 为什么Ruby open-uri打开在我的unit testing中返回一个StringIO,但在我的控制器中是一个FileIO?
- 避免使用第三方gem是正确的吗?