sidekiq memory usage reset
我有使用Sidekiq进行后台处理的Rails应用程序。要部署此应用程序,我使用capistrano,ubuntu服务器和apache passenger。要启动和重新启动Sidekiq,我使用capistrano-sidekiq gem。
我的问题是-Sidekiq运行时,Sidekiq使用的内存(RAM)数量正在增长。而且,当Sidekiq完成所有进程(工作人员)时,它会保持大量的RAM并且不进行重置。
1 2 | 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方法,然后等待该新进程退出
例如:
1 2 3 4 5 6 7 8 9 10 | class Job include Process def perform pid = fork do # your code end waitpid(pid) end end |