深入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 相关文章推荐
discuz安全提问算法
Jun 06 PHP
php 数组的创建、调用和更新实现代码
Mar 09 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
discuz加密解密函数使用方法和中文注释
Jan 21 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
PHP实现活动人选抽奖功能
Apr 19 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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根据IP地址获取所在城市具体实现
2013/11/27 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
初识Node.js
2014/09/03 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
js实现转动骰子模型
2019/10/24 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
对python 自定义协议的方法详解
2019/02/13 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
python梯度下降算法的实现
2020/02/24 Python
python访问hdfs的操作
2020/06/06 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
英国办公用品商店:Office Outlet
2018/04/04 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
大学生实习证明范本
2014/01/15 职场文书
医院总经理岗位职责
2014/02/04 职场文书
2014年营销工作总结
2014/11/22 职场文书
关于做家务的心得体会
2016/01/23 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL