Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading sidekiq何时结束进程,从而释放内存?_Multithreading_Ruby On Rails 4_Heroku_Memory Leaks_Sidekiq - Fatal编程技术网

Multithreading sidekiq何时结束进程,从而释放内存?

Multithreading sidekiq何时结束进程,从而释放内存?,multithreading,ruby-on-rails-4,heroku,memory-leaks,sidekiq,Multithreading,Ruby On Rails 4,Heroku,Memory Leaks,Sidekiq,据我所知,Ruby的内部工作原理只有在进程完成后才会释放内存 我正在调试一个运行时间很长的sidekiq Heroku进程,该进程存在内存问题,我试图找出后台进程的边界 所以。。。假设我有使用3个线程的sidekiq,它一次运行3个作业,我总共有100个作业。这意味着工作之间可能永远不会有休息,对吗?这是否意味着在所有100个作业完成之前,内存不会被释放?我想是的,它不会发布,直到100完成 但假设我切换到1个线程,100个作业会互相跟踪。每个作业现在是它自己的进程,还是sidekiq将所有排队

据我所知,Ruby的内部工作原理只有在进程完成后才会释放内存

我正在调试一个运行时间很长的sidekiq Heroku进程,该进程存在内存问题,我试图找出后台进程的边界

所以。。。假设我有使用3个线程的sidekiq,它一次运行3个作业,我总共有100个作业。这意味着工作之间可能永远不会有休息,对吗?这是否意味着在所有100个作业完成之前,内存不会被释放?我想是的,它不会发布,直到100完成

但假设我切换到1个线程,100个作业会互相跟踪。每个作业现在是它自己的进程,还是sidekiq将所有排队的100个作业视为一个进程(即使一次只运行一个)


如果是的话。。。有没有办法让每个作业都成为自己的进程,在完成后释放内存?

Ruby使用垃圾收集来回收内存。它会比你想象的更快地释放记忆。另请参见

谢谢!实际上,这是一个非常有用的链接。但是,你知道这个问题的答案吗。。就工作是一个过程而言,如果我的假设是正确的,工作不是一个过程。Sidekiq是一个创建25个工作线程的进程(默认情况下)。每个线程将在同一进程中并行执行一个作业。