php-fpm配置参数优化

常用的linux 查询进程状况命令
  • linux查看并发连接数:

     netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    
  • 使用Glances命令,再按下m,就可以查看到当前VPS主机进程内存占用情况了,按照占用内存由多到少排序(或者使用Top命令,按下M,效果是一样的)

    top    M
    
  • 查看当前php-fpm总进程数,命令:

     ps -ylC php-fpm --sort:rss  #查看进程对应的内存占用,RSS就是占用的内存情况
     ps -fe |grep "php-fpm"|grep "pool"|wc -l  #查看php进程数
    

在这里插入图片描述

  • 查看当前php-fpm进程的内存占用情况及启动时间,命令如下:

    ps -e -o ‘pid,comm,args,pcpu,rsz,vsz,stime,user,uid’|grep www|sort -nrk5

从下图可以看出当前php-fpm所有进程平均每个进程占用了60-70MB的内存,启动时间,是当天的话就是3:12,否则会显示是X月X日。
在这里插入图片描述

  • 查看当前php-fpm进程平均占用内存情况,一般来说一个php-fpm进程占用的内存为30-40MB,本次查询的结果是60MB,显然是多了。命令如下:

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

熟悉php-fpm配置文件说明

php-fpm.conf就是php-fpm的配置文件,路径一般在:

/usr/local/php/etc

php-fpm.conf几个重要的参数说明如下:

pm = dynamic #指定进程管理方式,有3种可供选择:static、dynamic和ondemand。
pm.max_children = 100 #static模式下创建的子进程数或dynamic模式下同一时刻允许最大的php-fpm子进程数量。
pm.start_servers = 10 #动态方式下的起始php-fpm进程数量。
pm.min_spare_servers =80 #动态方式下服务器空闲时最小php-fpm进程数量。
pm.max_spare_servers = 16 #动态方式下服务器空闲时最大php-fpm进程数量。
pm.max_requests = 2000 #php-fpm子进程能处理的最大请求数。超过该值则自动重启该进程,这样达到了释放内存的目的了
该值设置合理可以避免内存溢出,能够及时的释放内存。可以根据自己服务器流量情况来设置
pm.process_idle_timeout = 10s
request_terminate_timeout = 600
该值也比较重要,默认是0,没有时间限制,也就是如果某个请求非常慢,那么该进程可能会因为一直没有响应导致进程僵死,设置适当的值可以在超时时间中止请求。
参数配置参考:

如果代码是 CPU 计算密集型的,pm.max_chindren 不能超过 CPU 的内核数。
如果不是,那么将 pm.max_chindren 的值大于 CPU 的内核数,是非常明智的。
国外技术大拿给出这么个公式:

在 N + 20% 和 M/m 之间。

N 是 CPU 内核数量。
M 是 PHP 能利用的内存数量。
m 是每个 PHP 进程平均使用的内存数量。
适用于 dynamic 方式。

static方式:M/(m * 1.2)

当然,还有一种保险的方式,来配置 max_children。适用于 static 方式。

先把 max_childnren 设置成一个比较大的值。
稳定运行一段时间后,观察 php-fpm 的 status 里的 max
active processes 是多少
然后把 max_children 配置比它大一些就可以了。
pm.max_requests:指的是每个子进程在处理了多少个请求数量之后就重启。

这个参数,理论上可以随便设置,但是为了预防内存泄漏的风险,还是设置一个合理的数比较好

猜你喜欢

转载自blog.csdn.net/weixin_43627766/article/details/89382646