12.21 php-fpm的pool
[root@hyc-01-01 ~]# cd /usr/local/php-fpm/etc
[root@hyc-01-01 etc]# cat php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www] 用户可以在php-fpm配置文件中监听多个pool,不同的pool可以监听不同的端口或socket
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000
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
nginx有多个站点,若只有一个php的pool,当某个站点或某些站点将pool的资源耗尽,就会导致其他使用该pool的站点出现502(可能php资源耗尽)错误
最好将每个站点隔离,为每个站点设置单独的pool
在php配置文件中增加新的pool:
[root@hyc-01-01 etc]# cat php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000
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
/在php-fpm配置文件中增加以下配置/
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[test]
listen = /tmp/hyc.sock
#listen = 127.0.0.1:9000
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
[root@hyc-01-01 etc]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@hyc-01-01 etc]# /etc/init.d/php-fpm reload 重启服务
Reload service php-fpm done
[root@hyc-01-01 etc]# ps aux|grep php-fpm
…
php-fpm 64635 0.0 0.4 227240 4716 ? S 20:03 0:00 php-fpm: pool www
php-fpm 64636 0.0 0.4 227240 4716 ? S 20:03 0:00 php-fpm: pool www
php-fpm 64637 0.0 0.4 227240 4712 ? S 20:03 0:00 php-fpm: pool test
php-fpm 64638 0.0 0.4 227240 4712 ? S 20:03 0:00 php-fpm: pool test
php-fpm 64639 0.0 0.4 227240 4712 ? S 20:03 0:00 php-fpm: pool test
…
可以发现php-fpm多了名为test的pool
将两个站点隔离在两个pool中:
[root@hyc-01-01 vhost]# vim test.com.conf
…
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock; 这里指定监听的是www的socket地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
}
…
[root@hyc-01-01 vhost]# vim aaa.com.conf
server
{
listen 80;
server_name aaa.com;
index index.html index.htm index.php;
root /data/wwwroot/default;
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/hyc.sock; 指定监听test的socket地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
}
}
一个pool中有多个php进程提供服务,当请求过多时,pool中的所有php进程都处于忙状态时,则没有php进程能为新的请求提供服务,此时用户浏览器会报502错误,如果该pool仅为一个站点提供服务,那么其他pool的站点将不受影响
可以在php-fpm的主配置文件中增加以下配置,使每个pool单独写一个配置文件,类似nginx的vhost:
[root@hyc-01-01 etc]# vim php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
include = etc/php-fpm.d/*.conf 这里include行必须在最后,否则-t会报错
[root@hyc-01-01 etc]# mkdir php-fpm.d 创建存放每个pool的配置文件的目录
[root@hyc-01-01 php-fpm.d]# vim www.conf
[www]
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000
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
[root@hyc-01-01 php-fpm.d]# vim test.conf
[test]
listen = /tmp/hyc.sock
#listen = 127.0.0.1:9000
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慢执行日志
做php的网站,建议使用LNMP,这样可以分析php-fpm的慢执行日志,当php网站运行慢时可以分析网站为什么慢
配置:
[root@hyc-01-01 php-fpm.d]# vim www.conf
[www]
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000
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
request_slowlog_timeout = 1 php网站访问耗时超过1s记录日志
slowlog = /usr/local/php-fpm/var/log/www.slow.log 慢执行日志记录路径
检测并重启服务:
[root@hyc-01-01 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[19-Aug-2018 22:04:33] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@hyc-01-01 php-fpm.d]# /etc/init.d/php-fpm reload
[root@hyc-01-01 php-fpm.d]# ls /usr/local/php-fpm/var/log
php-fpm.log www.slow.log 生成了慢执行日志
测试生成慢执行日志过程:
[root@hyc-01-01 php-fpm.d]# cat /usr/local/nginx/conf/vhost/test.com.conf
…
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock; 该站点监听该socket地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
}
}
[root@hyc-01-01 vhost]# curl -x127.0.0.1:80 test.com/slow.php 执行测试脚本
test slow logdone
[root@hyc-01-01 php-fpm.d]# cat /usr/local/php-fpm/var/log/www.slow.log 查看生成的慢执行日志
[19-Aug-2018 22:35:25] [pool www] pid 64965
script_filename = /data/wwwroot/test.com/slow.php 执行慢的文件
[0x00007fcb453872d0] sleep() /data/wwwroot/test.com/slow.php:3 具体执行慢的行号
12.23 open_basedir
12.24 php-fpm进程管理