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下对字符串的递增运算代码
Aug 21 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 PHP
PHP入门教程之数学运算技巧总结
Sep 11 PHP
PHP获取用户客户端真实IP的解决方案
Oct 10 PHP
php compact 通过变量创建数组
Nov 15 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
PHP实现的观察者模式实例
Jun 21 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 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 strtotime函数详解
2009/12/18 PHP
WAF的正确bypass
2017/01/05 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
深入理解Node内建模块和对象
2019/03/12 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
python实现图片处理和特征提取详解
2017/11/13 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
Django Form常用功能及代码示例
2020/10/13 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
便利店投资创业计划书
2014/02/08 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
会议开幕词
2015/01/28 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
Redis入门基础常用操作命令整理
2022/06/01 Redis