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