问题 1:最近用 apache+passenger 部署了一个项目,在运行起来查看进程时发现:有一个 ruby 的父进程(内存占用 55MB 左右),还有 2 个该父进程创建的子进程(内存占用 46MB 左右),这两个子进程是怎么回事,求大大解? 问题 2:apache 接受请求的 apache2 进程和上面的 ruby 进程是怎么一个联系?求解答,在线等!!!
对了,ruby 子进程会被自动 kill 掉
参考 http://www.modrails.com/documentation/Users%20guide%20Nginx.html#spawning_methods_explained (这个是 Nginx Passenger 的解释;Apache Passenger 应该也是类似的)
大致是这样的:Passenger 有一个父进程,在 Passenger 启动时,加载了 Rails 框架以及项目的基础环境;然后等待请求。在接收到请求后,fork 自己生成一个子进程去处理。
由于 rails 应用启动很慢,但是 fork 的时候会用到 copy on write 技术,所以非常快。这样就能很快得创建 worker 进程去处理请求。
请求结束是 kill 掉子进程吗?
#3 楼 @yakczh 目前测试阶段,访问量少,请求结束之后空闲进程多了就会 kill 掉的
那这相当于 prefork