曲径通幽论坛

标题: PHP-FPM [打印本页]

作者: beyes    时间: 2011-11-3 19:31
标题: PHP-FPM
PHP-FPM 是 PHP
FastCGI  Process Manager 的缩写,即 PHP FastCGI 进程管理器。它实际
是为 PHP 打的一个 FastCGI 管理补丁,可以平滑变更 php.ini 配置而无需重启 php-cgi 。
它的最佳搭档是 N
ginx 服务器软件,特别是在页面负载比较重的情况下它的作用尤显突出。


它有下面几个特点:
basic SAPI status info (similar to Apache mod_status);


1. 具有平滑的 stop/start 的高级进程管理机制


2. 具有以不同的 uid/gid/chroot/environment, 可监听在不同的端口上,以及使用不同的 php.ini 来启动 worker 的能力;


3. 标准输入和标准错误日志功能;


4. 具有意外重启功能;


5. 具备加速上传机制支持;


6. “
slowlog” 功能;


7. 支持 PHP 函数
fastcgi_finish_request();


8. 支持静态或者动态的产生子进程;


9. 基本的 SAPI 状态信息(类似于 Apache 的
mod_status
)


10. 基于 php.ini 的配置访问(使用配置文件
php-fpm.conf
)


在修改了 php-fpm.conf (Linux) 后,只需要执行
php-fpm reload 就可以完成配置的加载。




php-fpm中的进程管理


在PHP5.3.X中的php-fpm,配置文件 php-fpm.conf 对于进程管理有两种方法,一种是静态(static),一种是动态(dynamic)。


如果设置成 static,进程数始终都是 pm.max_children 指定的数量。


如果设置成 dynamic,则进程数是动态的,最开始是 pm.start_servers 指定的数量,如果请求较多,则会自动增加,保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证进程数不多于 pm.max_spare_servers。


当php-fpm启动后,一个php-fpm进程处理过一些请求后,有些内存是释放不掉的,占用的内存将达到20M-30M不等。


对于内存大的服务器(比如说4G)来说,指定静态的 max_children 后就不需要再进行额外的进程数目控制。比如我们指定为100个,那么php-fpm耗费的内存就能控制在大概2G,剩余的2G内存可以处理别的任务。


如果内存小(比如1G),那么指定静态的进程数量,可以保证php-fpm只获取够用的内存,将不多的内存分配给其他应用去使用,有利于服务器的稳定,运行畅通。


分布式 FastCGI 架构图:
[attach]74[/attach]



关于 FastCGI 的更多信息可访问官方网站:www.fastcgi.com




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2