0

我很确定,所有Rack应用程序服务器(我对UnicornPassenger有一些经验)在创建时为每个工作人员创建单个进程,并且它的状态是“冻结”的。

每当应用服务器收到要处理的请求时,它都会从主进程分叉,并且对分叉进程的所有进一步更改都与原始进程分开。它们受益于写时复制优化,并且可以安全地被处理请求“损坏”。对环境的所有更改仅影响将被抢占的单个进程。

如果我对 RoR 应用程序堆栈的看法是正确的,那么几乎不需要垃圾收集,除非服务单个请求会占用大量时间和内存(通常情况并非如此)。

另一方面,关于使用 NewRelic 完成的 GC 测量的问题及其答案让我得出结论,我一定是完全错误的。

有人可以澄清这个过程吗?

4

1 回答 1

2

机架应用服务器不会在每次请求时分叉,仅在初始化期间:

  1. 一、环境在一个进程中加载
  2. 然后,服务器分叉几个工人
  3. 然后所有请求都分布在这些进程中

这就是垃圾收集器用于保持每个进程内存清洁和稳定的原因。

于 2012-11-23T16:03:07.607 回答