深入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 什么是PEAR?(第三篇)
Mar 19 PHP
PHP header()函数常用方法总结
Apr 11 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
Laravel5中contracts详解
Mar 02 PHP
PHP统一页面编码避免乱码问题
Apr 09 PHP
php获取远程文件的内容和大小
Nov 03 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
Jan 15 PHP
PHP实现创建以太坊钱包转账等功能
Apr 21 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在字符断点处截断文字的实现代码
2011/04/21 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
vuex 的简单使用
2018/03/22 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
SVM基本概念及Python实现代码
2017/12/27 Python
快速了解Python相对导入
2018/01/12 Python
python实现贪吃蛇双人大战
2020/04/18 Python
numpy库reshape用法详解
2020/04/19 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
小学开学寄语
2014/01/19 职场文书
民主生活会剖析材料
2014/09/30 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
python中的被动信息搜集
2021/04/29 Python