php-fpm中max_children的配置


Posted in PHP onMarch 15, 2019

现在nginx + fpm 基本成为主流的配置,其中我们比较关注的是pm.max_chindren的配置

首先,我们关注一个设置: pm = static/dynamic

这个选项是标识fpm子进程的产生模式:

static :表示在fpm运行时直接fork出pm.max_chindren个worker进程

dynamic:表示,运行时fork出start_servers个进程,随着负载的情况,动态的调整,最多不超过max_children个进程。

一般推荐用static,优点是不用动态的判断负载情况,提升性能,缺点是多占用些系统内存资源。

上面的告诉我们max_chindren代表的worker的进程数。普遍认为,这个配置越多能同时处理的并发也就越多,这是一个比较大的误区:

  • 1) 其实进程多了,增加进程切换的开销,更核心的是,能并发执行的fpm进程不会超过cpu个数。通过多开worker的个数来提升qps, 是错误的理解,不会说你多开了几个进程,就多出几个cpu来处理。
  • 2) worker进程开少了,如果server比较繁忙的话,会导到nginx把数据打到fpm的时候,发现所有的woker都在工作中,没有空闲的worker来接受请求,从而导致502。
  • 3) 在实际业务中,由于我们有很多的i/o操作,比如读取数据库,或者内部rpc调用这类在等待i/o的过程中,进程会被系统sleep, 而不占用cpu,如果配置worker少了,也会导致cpu利用不上

那worker数到底该怎么配置呢?

理论上woker进程数=cpu的个数是最合理的,但由于第2点,可能每个worker都没处理完请求,这样,就会频现502了。但多开进程,只是说避免502,暂时把请求hang住,但这只是缓解之道,实际上这不但不会增加系统的并发,而且会加重系统的负荷,所以,基于2,3 ,设置一个合理的worker数就比较重要了。

天下武功,唯快不破,只有尽可能的提升程序的效率,把单个请求的时间压缩到最低,这样,单个worker的处理时间变短了,那在单位时间里能处理的请求自然就多了。

那么可以通过每个worker在单位时间内处理的请求数来预估max_children的个数。假如最大的一个请求的处理时间(xhprof里看cpu时间)是100ms内,而在100ms之内同时有100个请求过来,那了理论上就需要配置100个worker进程,先把请求给hang住。

但最大的请求耗时可能会受很多外在的情况影响,不太好预估,尤其是网络i/o也算在里面,我们可以借用第三方的profile工具,比如xhprof, 这类工具可以统计cpu的耗时,通过这个时间来计算真正的worker数量,比总时间来计算要合理很多,其实这里有一个捷径,来配置你的max_children数, 就是你前期先把max_childnren设置成一个比较大的值,稳定运行一段时间后,观察fpm的status里的 max active processes 是多少,然后把max_children配置比他大一些就ok了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
转PHP手册及PHP编程标准
Dec 17 PHP
php Http_Template_IT类库进行模板替换
Mar 19 PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
Windows 下的 PHP-PEAR 安装方法
Nov 20 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 PHP
php实现的AES加密类定义与用法示例
Jan 29 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
Jul 17 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 PHP
php7 list()、session及其他模块的修改实例分析
May 25 PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 #PHP
php根据命令行参数生成配置文件详解
Mar 15 #PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 #PHP
PHP基于面向对象封装的分页类示例
Mar 15 #PHP
浅谈PHP无限极分类原理
Mar 14 #PHP
详解PHP队列的实现
Mar 14 #PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 #PHP
You might like
生成静态页面的PHP类
2006/11/25 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
JS匀速运动演示示例代码
2013/11/26 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
python登录豆瓣并发帖的方法
2015/07/08 Python
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
业绩考核岗位职责
2014/02/01 职场文书
高二物理教学反思
2014/02/08 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
法定代表人授权委托书
2014/09/19 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android
python神经网络 使用Keras构建RNN训练
2022/05/04 Python