部署 关于 Apache + Passenger 和 Ruby 进程的关系?

egg_show · 2014年02月11日 · 最后由 yakczh 回复于 2014年02月12日 · 3478 次阅读

问题 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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号