PHP-FPM 配置与实现
配置
对于 php-fpm
的配置,其实无需阅读网上各种文章,因为大多数时候,百度
搜索结果页前几页里,经常是重复的、概念性的、不全面的文章;或者在 CSDN
等网站上的文章,很多也是互相转载、互相 copy
。
实际上,我们在了解、使用、优化 php-fpm
的时候,做好以下几件事即可:
-
查看
php 手册
-
man php-fpm
:查看php-fpm
的命令,可以一窥可能用得到的选项。 -
阅读
php-fpm.conf
:一些启动时的配置,如pid
erro_log
daemonize
:是否daemon
形式运行,一般为yes
Pool Definitions
的配置,一般在php-fpm.d
目录下
-
阅读
php-fpm.d/www.conf
:一般是配置某个pool
,多个则可多个文件(当然也可以放在同一个文件),一些重要的配置如-
prefix = /data/devops/php/php-fpm/pools/liuduoyu.com
-
user = _www
、group = _www
:woker
所属用户与组 -
listen = 127.0.0.1:9202
:也可以是sock
文件/path/to/unix/socket
-
pm = dynamic
:很重要的配置,文件里有详细的解释三个不同的参数的区别。每种类型下,都有对应的其他指令。 -
pm.max_children = 5
:最大的子进程数(上限,不能超过该配置数) -
pm.start_servers = 2
:启动时fork
的worker
数,可通过min_spare_servers + (max_spare_servers - min_spare_servers) / 2
进行计算。 -
pm.min_spare_servers = 1
:空闲(idle state
)的worker
数最小值,小于该值则创建新的worker
-
pm.max_spare_servers = 1
:空闲(idle state
)的worker
数最大值,大于该值则kill
已存在的worker
-
pm.max_requests = 500
:单个woker
处理的最大请求数,超过则会自动退出(防止内存泄漏
)。 -
pm.status_path = /fpm-status
:配置php-fpm
的status page
,需要结合web server
如nginx
等使用。 -
slowlog = log/$pool.log.slow
:慢日志,需要结合request_slowlog_*
等配置使用。默认是10 s
的阈值记录。 -
;rlimit_files = 1024
:打开的最大文件句柄数,这个一般依赖操作系统
的配置,如果服务器要启动很多个woker
,可能需要调整这个参数。 -
env
:设置一些环境变量,需要设置clear_env = no
,然后测试env[AUTHOR] = LIUDUOYU
,在php
代码中echo $_SERVER['AUTHOR'];
-
php_admin_value
:设置一些php.ini
的配置,不能被ini_set
覆盖 -
php_flag
:设置一些php.ini
的配置,能被ini_set
覆盖
-
关于 php-fpm status page
的配置
- 使用
Nginx
:
|
|
地址形如:
|
|
- 可以使用自带的
status.html
,在该页面的Status URL
填写上述地址即可:
|
|
进程模型
典型的 mster-worker
进程模型,类似于 nginx
。
php-fpm
的 master
进程,在初始化之后,然后执行 fpm_run()
,随即进入一个事件循环中,(fpm_event_loop()
)。
生命周期
… 待续