深入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 定界符 使用技巧
Jun 14 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
PHP 引用文件技巧
Mar 02 PHP
joomla jce editor 解决上传中文名文件失败问题
Jun 09 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
PHP编程中尝试程序并发的几种方式总结
Mar 21 PHP
Laravel5权限管理方法详解
Jul 26 PHP
轻松掌握php设计模式之访问者模式
Sep 23 PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 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执行linux系统命令的常用函数使用说明
2010/04/27 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
php获取远程文件内容的函数
2015/11/02 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
PHP7常量数组用法分析
2016/09/26 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
Python随机生成手机号、数字的方法详解
2017/07/21 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
python添加菜单图文讲解
2019/06/04 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
Python pandas如何向excel添加数据
2020/05/22 Python
浅谈django channels 路由误导
2020/05/28 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
安全生产责任书
2014/03/12 职场文书
优秀班组事迹材料
2014/12/24 职场文书
体育活动总结
2015/02/04 职场文书
小学元宵节活动总结
2015/02/06 职场文书