8.17 12.21-12.24

12.21 php-fpmpool

[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有多个站点,若只有一个phppool,当某个站点或某些站点将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多了名为testpool

 

将两个站点隔离在两个pool中:

[root@hyc-01-01 vhost]# vim test.com.conf

   location ~ \.php$

       {

           include fastcgi_params;

           fastcgi_pass unix:/tmp/php-fcgi.sock; 这里指定监听的是wwwsocket地址

           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; 指定监听testsocket地址

           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单独写一个配置文件,类似nginxvhost

[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进程管理


猜你喜欢

转载自blog.51cto.com/12216458/2161678