PHP-FPM 配置与实现
配置
对于 php-fpm 的配置,其实无需阅读网上各种文章,因为大多数时候,百度搜索结果页前几页里,经常是重复的、概念性的、不全面的文章;或者在 CSDN 等网站上的文章,很多也是互相转载、互相 copy。
实际上,我们在了解、使用、优化 php-fpm 的时候,做好以下几件事即可:
-
查看
php 手册 -
man php-fpm:查看php-fpm的命令,可以一窥可能用得到的选项。 -
阅读
php-fpm.conf:一些启动时的配置,如piderro_logdaemonize:是否daemon形式运行,一般为yesPool 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())。
生命周期
… 待续