LEMP部署之安装配置及优化PHP-FPM

By | February 14, 2018

PHP-FPM(FastCGI 进程管理器)

安装

  1. 配置 YUM 仓库

  1. 安装 PHP 及其模块

配置 PHP-FPM

还需要配置才可以运行 PHP-FPM,修改 /etc/php-fpm.d/www.conf 文件:

重启 PHP-FPM

Nginx 环境下配置 PHP-FPM

  1. 在 Nginx 配置文件 /etc/nginx/nginx.conf 的 http块中添加以下内容:

  2. 添加下面内容到时 server 块中,测试一下 PHP-FPM 是否正常运行:

    递归新建目录 /www/test,并且將 test 目录设为 nginx 可读。
    然后在其目录下新建一个 test123.php 文件,用 PHP 语言输出一段字符即可,这里是输出 phpinfo() 函数的执行结果。

对 PHP-FPM 进行优化

由于测试环境是小内存服务器,1GB内存,1核的CPU,为了减少因内存占用过多而宕机的概率且加强其访问性能,有必要地进行优化。

  1. pm = static 和 pm = dynamic:决定进程管理器如何控制子进程的数目,其中前者表示 pm.max_children 的值为固定子进程的数目,后者则表示 pm.max_children 的值是随访问并发量而定,动态变化的。

  2. pm.max_children 选项:

    • 并发(最大)请求数。如果是 pm = static,表示固定创建的子进程数目;如果是 pm = dynamic,那么这个选项的值指每个 PHP-FPM 主进程可以创建的最大子进程数目。
    • 每个子进程所要消耗的内存在 15 到 25 MB,折中了一下,20MB左右;而一个 Nginx 进程要占 5 到 10 MB 的内存。
    • 此选项的原值为 50,取值按实际访问并发量以及服务器的内存大小而定。
    • 由于测试环境所用的内存大小为 1GB,所以综合(还要考虑 MySQL 和Nginx 等其他服务)思量了实际情况,我將其设为 15 。
  3. pm.start_server 选项:
    • 设置 PHP-FPM 启动时创建的子进程数目
    • 仅在 pm = dynamic 时使用,默认值:min_spare_servers + (max_spare_servers – min_spare_servers) / 2。 至于以上两个运算数是什么,本文下面会说明。
    • 不能小于pm.min_spare_servers,也不能大于pm.max_spare_servers
    • 根据实际情况,我设为 6 + (15 – 6)/ 2 ,即为 10 个,不敢调太高,因为内存的制约。
  4. pm.min_spare_servers 选项:
    • 设置空闲服务器进程的最低数目。
    • 仅在 pm = dynamic 时使用,必须设置的项。
    • 我设值为 6。
  5. pm.max_spare_servers 选项:
    • 设置空闲服务进程的最大数目。
    • 仅亦必须在 pm = dynamic 时使用。
    • 我设为 15。
  6. pm.max_requests 选项:
    • 每个子进程处理的最大请求数,达到最大数目时, PHP-FPM 会重启该子进程,设为 0 时,表示就不重启,会一直接受请求。
    • 官方文档描述:设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 ‘0’ 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0。
    • 原值为 500,并且被注释掉了。
    • 打开注释,并且重新设置为 1024。
  7. request_terminate_timeout 选项:
    • 设置单个请求的执行超时中止时间,与 php.ini 设置中的 max_execution_time 指令相关,如果因某种情况脚本必须终止,而 max_execution_time 此值又没有达到时有用。
    • 设为 0 表示关闭,即是把终止时间的设值交给 max_execution_time
    • 可用时间单位有:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。
    • 以上据 PHP 官方文档
    • 因为 我要在 php.ini 设置 max_execution_time 为很大的值,所以这个值便设为 0,把控制权交由 max_execution_time 的值。
  8. rlimit_files 选项:
    • 官方描述:“设置文件打开描述符的 rlimit 限制。默认值:系统定义值。”
    • 我设值为 51200

就这样, 最后的 PHP-FPM 配置文件的修改如下:

还有一个,在 /etc/php-fpm.conf 文件中的选项:
process_control_timeout 选项:
* 设置子进程被复用,也就是等待主进程分配任务(信号)的超时时间。
* 单位为 s(秒), m(分),h(小时),d(天)。
* 默认值为0
* 以上参照:PHP 官方文档

参考资料:

PHP 官方文档-FastCGI 进程管理器(FPM)
Nginx+php中php-fpm参数配置优化

对 php.ini 文件进行配置

  1. max_execution_time 指令:脚本的最大运行时间,达到此时间,该进程会被杀掉,默认为 30秒,现设为很大的数,例如:1024
  2. post_max_size 指令:PHP 能接收的 POST 数据的大小,原值为 8M ,现在设为 200M。
  3. upload_max_filesize 指令: 最大上传文件的大小,默认为 2M,现设为 180M。

完成配置

重启 PHP-FPM 进程

如果物理内存不够用,可以使用虚拟内存。虚拟内存的创建方法在另外一篇文章————Linux 虚拟内存的创建与设置优化

Created On: 2018-02-14


© 2018 – 2019, Navin. All rights reserved.

鉴于本人的相关知识储备以及能力有限,本博客的观点或者描述如有错漏或是有考虑不周到的地方还请多多包涵,也欢迎指正,一起学习,共同进步。

0