深入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读取MySQL数据代码
Jun 05 PHP
Php Cookie的一个使用注意点
Nov 08 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
PHP实现对图片的反色处理功能【测试可用】
Feb 01 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 PHP
php7 图形用户界面GUI 开发示例
Feb 22 PHP
PHP7新增函数
Mar 09 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获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
JavaScript链式调用实例浅析
2018/12/19 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
python字符串string的内置方法实例详解
2018/05/14 Python
Python Django 命名空间模式的实现
2019/08/09 Python
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
中学自我评价
2014/01/31 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
全民创业工作总结
2015/08/13 职场文书