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+MSSQL分页的例子
Oct 09 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
50个PHP程序性能优化的方法
Jun 02 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
详解php比较操作符的安全问题
Dec 03 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
Aug 12 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
Oct 15 PHP
PHP PDOStatement::bindValue讲解
Jan 30 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 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
jQuery 源码分析笔记
2011/05/25 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
php短信接口代码
2016/05/13 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
Python函数装饰器实现方法详解
2018/12/22 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
jupyter notebook实现显示行号
2020/04/13 Python
使用python计算三角形的斜边例子
2020/04/15 Python
python与pycharm有何区别
2020/07/01 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
教师节促销活动方案
2014/02/14 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python