首页 > 编程语言 >设置PHP最大连接数及php-fpm -static高并发

设置PHP最大连接数及php-fpm -static高并发

时间:2024-02-26 22:15:16浏览次数:35  
标签:PHP fpm 连接数 内存 进程 php pm

设置PHP最大连接数及php-fpm 高并发 参数调整

 

服务器中找到php-fpm.conf配置(有的会在引入的www.conf中)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [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

  

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

1 2 3 4 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);

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

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

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

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

     

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

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

    

    三.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 2 3 4 5 6 7 8 9 10 1. 停止命令     pkill php-fpm    2.重启或启动命令    php-fpm -R   /alidata/server/php/sbin/php-fpm
  分类: PHP 好文要顶 关注我 收藏该文 微信分享 程序bug生
粉丝 - 0 关注 - 0      

标签:PHP,fpm,连接数,内存,进程,php,pm
From: https://www.cnblogs.com/showker/p/18035691

相关文章

  • Thinkphp
    官网https://www.thinkphp.cn/docComposerComposer是PHP的一个依赖管理工具,它允许你声明项目所需的库依赖,并且会为你安装它们。在许多方面,它与其他编程语言中的包管理工具类似,例如Node.js的npm或者Python的pip。使用Composer可以使PHP开发变得更加高效、组织化,并......
  • GraphPad Prism 10: 你的数据,我们的魔法 mac/win版
    GraphPadPrism10是GraphPadSoftware公司推出的一款功能强大的数据分析和可视化软件。它集数据整理、统计分析、图表制作和报告生成于一体,为科研工作者、学者和数据分析师提供了一个高效、便捷的工作平台。→→↓↓载GraphPadPrism10mac/win版Prism10拥有丰富的图表类型,......
  • PHP打印内置变量的内容
    PHP有很多内置全局变量,例如$_SERVER,$_POST等,本文采用将关联数组嵌套到普通数组内进行打印。方法1:<?php$array=array($_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV);foreach($arrayas$subarray){foreach($subarrayas$key=>$value)......
  • Docker安装mariadb数据库与web管理工具phpmyadmin
    安装mariadb数据库获取指定版本的mariadb数据库docker镜像使用dockersearchmariadb搜索相关镜像;MacBook-Pro:~chenxiaolong$dockersearchmariadbNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDmar......
  • pymysql连接数据库和sqlite
    如果使用mysql,需要配置如下: -1配置文件中配置:settings.py DATABASES={'default':{'ENGINE':'django.db.backends.mysql','NAME':'数据库名字','HOST':'127.0.0.1'......
  • PHP数据库连接
    PHP连接Mysql方式MySQLiextension("i"意为improved)PDO(PHPDataObjects)PDO应用在12种不同数据库中,MySQLi只针对MySQL数据库。phpinfo()查看是否安装PDOphp代码连接数据库<?php//MySQLi-面向对象$servername="localhost";$username="root";$pass......
  • PHP表单
    表单表单提交form.html<html><head><metacharset="utf-8"><title>表单提交测试</title></head><body><formaction="form_action.php"method="post">名字:<inputtype="text&qu......
  • 解决宝塔中php项目访问502 Bad Gateway问题
    原因访问网站是nginx转发不到PHP上,宝塔上PHP通常使用监听文件的方式,文件需要写入权限解决方法:进入站点点查看nginx转发地址,发现引入了一个enable-php-74.conf文件 进入到根目录搜索enable-php-74.conf文件然后打开打开后查看转发地址,这里用的是监听文件方式最后找到这个......
  • 解决mac下 php 提示dyld: Library not loaded: /opt/homebrew/opt/icu4c/lib/icui18n.
    产生原因是使用brewupdate后icu4c更新到了最新的版本导致php依赖的版本不一致,进入到/opt/homebrew/opt/icu4c/lib目录下查看没有icui18n.69.dylib文件 解决方法:网上下载icu4c69版本重新编译安装下载地址:https://github.com/unicode-org/icu/releases/tag/release-69-1只需......
  • nginx与php pathinfo(TP5框架适用)
    最近在试用fastadmin这一个框架,是由tp5进行二开后的一款框架。fastadmin里面有个代码,要获取pathinfo否则会重定向到登录页,而默认的nginx配置获取的pathinfo一直为空,就导致无法正常进入后台。通过查找资料后,发现pathinfo是php的产物,与nginx无关。如果要让nginx把pathinfo环境变量......