php-fpm中max_children的配置

 更新时间:2019年03月15日 14:57:31   作者:CODETC  
今天小编就为大家分享一篇关于php-fpm中max_children的配置,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

现在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文件操作那么关于在指定的位置插入数据就比较复杂了,下面我们就来看看关系在文件指定行插入数据实例吧。
    2010-05-05
  • PHP 命名空间原理与用法详解

    PHP 命名空间原理与用法详解

    这篇文章主要介绍了PHP 命名空间,结合实例形式详细分析了PHP 命名空间概念、功能、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • php实现数组中出现次数超过一半的数字的统计方法

    php实现数组中出现次数超过一半的数字的统计方法

    在本篇文章中我们给大家分享了php如何实现数组中出现次数超过一半的数字的统计方法,有需要的朋友们参考下。
    2018-10-10
  • php命令行用法入门实例教程

    php命令行用法入门实例教程

    这篇文章主要介绍了php命令行用法入门,以实例的形式分析了在命令行中运行php程序的方法,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • php判断目录存在的简单方法

    php判断目录存在的简单方法

    在本篇文章里小编给大家分享了关于php判断目录是否存在的相关知识点,有需要的朋友们参考学习下。
    2019-09-09
  • 解析php file_exists无效的解决办法

    解析php file_exists无效的解决办法

    本篇文章是对php中file_exists无效的解决办法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php cookie使用方法学习笔记分享

    php cookie使用方法学习笔记分享

    在php中cookie与其它程序中没什么两样,cookie都是用来存储信息到客户端,常用用于安全性要求不高的一些应用中,如用户登录记住密码之类的,下面我来给大家介绍一下php cookie学习笔记
    2013-11-11
  • 在PHP 7下安装Swoole与Yar,Yaf的方法教程

    在PHP 7下安装Swoole与Yar,Yaf的方法教程

    周末闲来无事,玩玩swoole,所以下面这篇文章主要给大家介绍了在PHP 7下安装Swoole与Yar,Yaf的方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • PHP对象相互引用的内存溢出实例分析

    PHP对象相互引用的内存溢出实例分析

    这篇文章主要介绍了PHP对象相互引用的内存溢出实例分析,是PHP5.3以下版本中常见的一个bug,文中给出了解决方法,需要的朋友可以参考下
    2014-08-08
  • php进行ip地址掩码运算处理的方法

    php进行ip地址掩码运算处理的方法

    这篇文章主要介绍了php进行ip地址掩码运算处理的方法,涉及php字符串及网络操作相关技巧,需要的朋友可以参考下
    2016-07-07

最新评论