2019独角兽企业重金招聘Python工程师标准>>>
12.21 php-fpm的pool
一个Nginx服务器可能运行多个站点,那么php-fpm使用同一个pool资源,当一个站点资源耗尽之后,就有可能会影响所有站点都不能访问。每个站点使用独立的pool,就能够避免这种情况发生。
编辑php-fpm.conf配置文件:在[global]中增加一个pool [lgs.com]
[lgs.com] //pool名
listen = /tmp/lgs.sock //每个pool监听的sock都不一样,这里就是要区分开不同站点的地方
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
验证:ps一下就能看到有两个php-fpm的pool:
php-fpm 6115 0.0 0.4 226640 4716 ? S 16:10 0:00 php-fpm: pool www
php-fpm 6116 0.0 0.4 226640 4712 ? S 16:10 0:00 php-fpm: pool lgs.com
然后需要到nginx的虚拟主机配置文件里去配置php-fpm指定的pool
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/lgs.sock; //这里指定pool的sock
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name; //代理服务器的ip
}
我们还可以像nginx的虚拟主机配置文件一样,把php-fpm的pool独立出来单独一个配置文件:例如lgs.com的pool配置文件为lgs.conf
先在php-fpm.conf增加include 配置行
include = etc/php-fpm.d/*.conf
再编辑www和lgs.com的pool配置文件分别为 www .conf 和 lgs.conf:
[www] //www .conf
listen = /tmp/php-fcgi.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[lgs.com] //lgs.conf
listen = /tmp/lgs.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
12.22 php-fpm慢执行日志
Nginx有一个很好的特性就是慢执行日志。可以定义php执行超过指定时间,就会记录到慢执行日志中去,记录那个文件那行代码执行过程慢。
在pool的配置文件里配置
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
request_slowlog_timeout = 2 //php执行超过2秒 记录日志
slowlog = /usr/local/php-fpm/var/log/www-slow.log //存放日志的目录
验证测试:编辑一个php 的sleep脚本:
vim /data/wwwroot/test.com/sleep.php
查看日志:
tail /usr/local/php-fpm/var/log/www-slow.log
script_filename = /data/wwwroot/test.com/sleep.php
[0x00007fe02657e3e0] sleep() /data/wwwroot/test.com/sleep.php:3
12.23 open_basedir
当服务器运行多个站点时,php-fpm可以使用open_basedir来指定每个站点的目录范围,不能在php.ini中去只能指定一个目录。
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //在pool的配置文件中增加一行配置
php_aming_value[open_basedir]=/data/wwwroot/test.com:/tmp/ //指定该站点的网站目录
12.24 php-fpm进程管理
php-fpm的pool配置文件中的关于进程的配置行的说明
vim www.conf
[www]
listen = /tmp/php-fcgi.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic //定义进程启动方式(dynamic表示动态,static表示静态)
//只有pm设置为dynamic,下面的配置才生效
pm.max_children = 50 //最多启动的子进程数量
pm.start_servers = 20 //开始启动的子进程数量
pm.min_spare_servers = 5 //空闲时最少有几个子进程,到5个就会自动增加
pm.max_spare_servers = 35 //空闲时最多有几个子进程,到35个就会自定清理
pm.max_requests = 500 //一个子进程最多可接受多少个请求,到达500就会自动退出子进程
rlimit_files = 1024 //每个子进程打开的文件句柄个数