php-fpm相关配置

最近测试环境老是被 php-fpm打满,但是又不知道怎么排查,分析不出是哪些请求占用导致 php-fpm 没有释放,于是学习了一下 php-fpm 的配置;
通过 /status可以查看子进程处理请求的信息,但是这个一般不会开放,只能在自己的机器搞搞;测试时配置了慢日志,sleep 了10 秒,发现没往 log.slow文件里写日志,还不确定是什么原因。

  • 查看 php 配置文件 ini 的路径
    php -i | grep .ini

Go

  • 查看 php-fpm 配置文件路径
    ps -ef | grep php-fpm

Go

  • php-fpm 重启
    关闭
    kill -INT `cat /usr/local/var/run/php-fpm.pid`
    平滑重启
    kill -USR2 `cat /usr/local/var/run/php-fpm.pid`
    暴力重启
    先关闭,再启动 killall php-fpm && /usr/local/sbin/php-fpm &
  • 修改子进程管理模式,pm 配置
    修改配置
    pm = static
    pm.max_children = 3
    表示固定子进程数为 3 个

Go

修改配置
pm = ondemand
pm.max_children = 2
表示子进程按需生成,最多2个,pm.process_idle_timeout 表示空闲进程空闲多少秒后超时退出

Go

修改配置
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
表示子进程是动态生成,服务启动时创建 2 个子进程,最大空闲进程 3 个,最小空闲进程 1 个,最多子进程 5 个

Go

  • 配置访问进程状态
    修改配置
    pm.status_path = /status
    修改 nginx 配置
    location /status {
      fastcgi_pass   php:9000;
      include        fastcgi_params;
      fastcgi_param  SCRIPT_FILENAME $fastcgi_script_name;
      fastcgi_param HTTP_X_FORWARDED_FOR host.docker.internal;
     }
    重启相关服务后,访问 xxx.com:8888/status?json&full

Go
可以看到相关指标

本作品采用《CC 协议》,转载必须注明作者和本文链接
雪花飘
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!