• 技术文章 >后端开发 >PHP问题

    php怎么设置并发连接数

    VV2021-09-26 17:10:11原创129

    php设置并发连接数的方法:1、找到php-fpm.conf配置;2、编辑选项【pm= static】、【request_terminate_timeout】、【pm.max_requests】。

    本文操作环境:windows10系统、php 7、thinkpad t480电脑。

    首先我们需要在服务器中找到php-fpm.conf配置(也有可能会在引入的www.fong配置中)

    找到如下内容:

    [global]
    pid = /usr/local/php/var/run/php-fpm.pid
    error_log = /usr/local/php/var/log/php-fpm.log
    log_level = notice
     
    [www]
    listen = /tmp/php-cgi.sock
    listen.backlog = -1
    listen.allowed_clients = 127.0.0.1
    listen.owner = www
    listen.group = www
    listen.mode = 0666
    user = www
    group = www
    pm = static
    pm.max_children = 200
    pm.start_servers = 40
    pm.min_spare_servers = 10
    pm.max_spare_servers = 20
    pm.max_requests=1000
    request_terminate_timeout = 100
    request_slowlog_timeout = 0
    slowlog = var/log/slow.log

    ---------------------------------------------------------------------------

    pm.max_children=30
    pm.max_requests=500
    pm.start_servers=4
    pm.max_spare_servers=30

    一. pm= static

    首先说一下pm这个值 pm = dynamic 这个是php的进程数是动态的 会根据访问量来确定来回增加

    而在高负载的php环境下我推荐设置 pm= static php-fpm进程数固定

    二. pm.max_children=???

    当用静态模式下 进程数确定根据 pm.max_children来进进行确定 那么问题来了我的服务器应该设定多少php-fpm呢 ?

    从理论的角度上说php-fpm进程数越多越好,相当于一个酒店有很多个充足的服务员来为你服务肯定会比较爽啊 ,你也不需要等待。

    但是。。。。现实上总是残酷的 php-fpm的进程数会受到你的内存大小的限制。一般情况下我们 进程数 =用机器内存(M)除以2 再除以20(M);

    当然这个也不是绝对的 你需要知道:

    你可以分配给php多大内存 :你的服务器上是不是单纯的php服务器 有没有比较耗费内存的其他程序(mysql)。 你的每个php-fpm内存占多大 :内存占用多大要根据你的php代码质量和处理的相关业务。当然你可以用命令去统计你的php-fpm平均占用内存大小。

    有人会问我如果设置不恰当会有什么状况出现呢?

    当数值偏小时请求到nginx会无法分配到php-fpm进程 导致502错误

    b84533a9dbf5b505ff5abb4564b8cf8.png

    当数值偏大如果没有大访问量还好 如果访问量较大的话 内存都会被php占光了。导致系统响应缓慢 cpu-system 升高 系统不断的去调整内存分配

    严重时会导致较高的 cup-wait 较高 内存不够用了 直接写磁盘 磁盘io直线增加 。cpu使用率也开始爆满。(如图所示)

    07d406dd10da893862b7e501b182c17.png

    三.request_terminate_timeout

    计算方式如下:如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没有循环或BUG的话你可以直接将”request_terminate_timeout”设 置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。

    而如果你做不到这一点,也就是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI能够假死那么就建议你给”request_terminate_timeout”赋一个值,这个值可以根 据你服务器的性能进行设定。

    一般来说性能越好你可以设置越高,20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行,有的可能会超过10分钟因此我设置了900秒,这样不会导致PHP-CGI死掉而出现502 Bad gateway这个错误。

    四.pm.max_requests

    这个参数的含义是php-fpm工作进程处理完多少请求后自动重启,主要目的就是为了控制请求处理过程中的内存溢出,使得内存占用在一个可接受的范围内。比较适用于服务器搭载项目比较杂乱,有点请求会比较占用内存

    导致php-fpm占用比较大。在经过一定次数请求后会结束掉进程,释放自己的内存。如果这个值太小就会导致所有的工作进程几乎同时达到这个值并且进入需要重启的状态,当所有的工作进程都在同一时刻重启就会发生在

    数秒内甚至更长的时间PHP将停止响应直到所有的进程均重启完为止。这是不能接受的,所以我一般会把这个值设置为PHP启动后第一批工作进程达到此值需要重启时,第一个进程重启与最后一个进程重启之间的时间相差

    1分钟以上,一般在压力比较大的晚上这个差值将会扩大到5分钟左右,此时对进程重启对服务器的负面影响就可以忽略了。

    下面补充几个命令统计相关php-fpm 相关数据

    1、查看php-fpm的进程个数

    ps -ef |grep "php-fpm"|grep "pool"|wc -l

    2、查看每个php-fpm占用的内存大小

    ps -ylC php-fpm --sort:rss

    3.查看PHP-FPM在你的机器上的平均内存占用

    ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

    4.查看单个php-fpm进程消耗内存的明细

    pmap $(pgrep php-fpm) | less

    重启php-fpm

    1. 停止命令
      
     pkill php-fpm
      
    2.重启或启动命令
      
    php-fpm -R
     
    或
    /alidata/server/php/sbin/php-fpm

    推荐学习:php培训

    以上就是php怎么设置并发连接数的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php 并发 连接数
    上一篇:php怎么根据时间戳判断周几 下一篇:php中如何使用unlink删除文件夹
    大前端线上培训班

    相关文章推荐

    • 详解Redis的高可用和高并发机制• 如何用PHP解决高并发问题?(附源码)• 什么是并发控制?JavaScript中如何实现并发控制?• 高并发有哪三种解决方法?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网