我非常确定,所有Rack应用程序服务器(我有Unicorn和Passenger的经验)都在为每个工作人员创建时创建单个进程,并且其状态被“冻结”了。
每当应用服务器收到要处理的请求时,它就会从主进程分叉,并且对分叉进程的所有进一步更改都与原始进程分开。它们受益于写时复制优化,并且可以安全地被处理请求“损坏”。对环境的所有更改都只影响将被抢占的单个进程。
如果我对RoR应用程序堆栈的看法是正确的,那么几乎不需要垃圾收集,除非提供单个请求会花费大量时间和内存(通常情况并非如此)。
另一方面,question about GC measurements done with NewRelic及其答案让我得出结论,我一定是完全错了。
有人可以澄清这个过程吗?
答案 0 :(得分:2)
机架应用程序服务器不在每个请求时分叉,仅在初始化期间:
这就是垃圾收集器用于保持每个进程内存清洁的原因。稳定。