PHP-FPM是一个PHPFastCGI管理器,是只用于PHP的。
php-fpm 已经在 Linux、MacOSX、Solaris 和 FreeBSD 上测试通过。
确信 libxml2(在某些系统上叫做libxml2-devel)已经安装。
参数调优
进程数
首先,我们关注一个前提设置: pm = static/dynamic,标识fpm子进程的产生模式
static(静态) :表示在fpm运行时直接fork出pm.max_chindren个worker进程
dynamic(动态):表示运行时fork出start_servers个进程,随着负载的情况,动态的调整,最多不超过max_children个进程。
一般推荐用static,优点是不用动态的判断负载情况,提升性能,缺点是多占用些系统内存资源。
static:worker进程 | pm.max_children = 300 | 这个值原则上是越大越好 |
---|---|---|
dynamic:worker进程 | pm.start_servers = 20 | |
dynamic:空闲状态 | pm.min_spare_servers = 5 | 最小php-fpm进程数量 |
dynamic:空闲状态 | pm.max_spare_servers = 35 | 最大php-fpm进程数量 |
max_children
这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。
设置”max_children”也需要根据服务器的性能进行设定
一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右
假设“max_children”设置成100个,20M*100=2000M
也就是说在峰值的时候所有PHP-CGI所耗内存在2000M以内。
假设“max_children”设置的较小,比如5-10个,那么php-cgi就会“很累”,处理速度也很慢,等待的时间也较长。
如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误。