深入php-fpm的两种进程管理模式详解


Posted in PHP onJune 03, 2013

php-fpm的两种进程管理模式
php-fpm的进程数也是可以根据设置分为动态和静态的。
一种是直接开启指定数量的php-fpm进程,不再增加或者减少;
另一种则是开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限。
这两种不同的执行方式,可以根据服务器的实际需求来进行调整。
这里先说一下涉及到这个的几个参数吧,他们分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。
pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。
在更老一些的版本中,dynamic被称作apache-like。这个要注意看配置文件给出的说明了。PHP5.3
php-fpm的默认静态处理方式会使得php-cgi的进程长期占用内存而无法释放,这也是导致nginx出错的原因之 一,因此可以将php-fpm的处理方式改成apache模式。
下面4个参数的意思分别为:
    pm.max_children:静态方式下开启的php-fpm进程数量。
    pm.start_servers:动态方式下的起始php-fpm进程数量。
    pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
    pm.max_spare_servers:动态方式下的最大php-fpm进程数量。
如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置的数量个php-fpm进程。

如果dm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动 pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和 pm.max_spare_servers之间调整php-fpm进程数。

那么,对于我们的服务器,选择哪种执行方式比较好呢?事实上,跟Apache一样,我们运行的PHP程序在执行完成后,或多或少会有内存泄露的问题。

这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。所以,动态方式因为会结束掉多余的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或者VPS上使用。具体最大数量根据 内存/20M 得到。比如说512M的VPS,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比较合适的值在5~10之间。

然后对于比较大内存的服务器来说,设置为静态的话会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据内存/30M 得到。比如说2GB内存的服务器,可以设置为50;4GB内存可以设置为100等。

PHP 相关文章推荐
PHP面向对象编程快速入门
Oct 09 PHP
PHP输出控制功能在简繁体转换中的应用
Oct 09 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
php 获取本地IP代码
Jun 23 PHP
php过滤敏感词的示例
Mar 31 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
smarty实现多级分类的方法
Dec 05 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
php 算法之实现相对路径的实例
Oct 17 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 #PHP
基于PHP异步执行的常用方式详解
Jun 03 #PHP
php生成二维码的几种方式整理及使用实例
Jun 03 #PHP
深入PHP异步执行的详解
Jun 03 #PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 #PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 #PHP
PHP Error与Logging函数的深入理解
Jun 03 #PHP
You might like
解析如何用php screw加密php源代码
2013/06/20 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
php模拟post提交数据的方法
2015/02/12 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
Python用threading实现多线程详解
2017/02/03 Python
Python装饰器用法实例总结
2018/05/26 Python
python+flask实现API的方法
2018/11/21 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
服装设计专业自荐书范文
2013/12/30 职场文书
合作意向书格式及范文
2014/03/31 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
工作评语大全
2014/04/26 职场文书
转学证明范本
2015/06/19 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers