2018.3.19 13周1次课

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.3.19 13周1次课相关的知识,希望对你有一定的参考价值。

十三周一次课(3月19日)

12.21 php-fpm的pool

12.22 php-fpm慢执行日志

12.23 open_basedir

12.24 php-fpm进程管理

12.21 php-fpm的pool

和LAMP不同的是,在LNMP架构中,php-fpm作为独立的一个服务存在。既然是独立服务,那么它必然于自己的配置文件。Php-fpm的配置文件是/usr/local/php/etc/php-fpm.conf,它同样也支持include语句。类似于nginx.conf里面的include

Nginx可以配置多个虚拟主机,php-fpm同样也支持配置多个pool,每一个pool可以监听一个端口,也可以监听一个socket。

cat /usr/local/php-fpm/etc/php-fpm.conf //可以看到只有一个www的pool

技术分享图片

可以在配置文件php-fpm.conf里继续增加pool

[aming.com]

listen = /tmp/aming.sock

#listen = 127.0.0.1:9000

listen.mode = 666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50 //最大50个进程

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

-t && reload

/usr/local/php-fpm/sbin/php-fpm –t

service php-fpm reload

ps aux |grep php-fpm //可以看到右边多了aming.com的pool

技术分享图片

怎么使用:

cd /usr/local/nginx/conf/vhost

技术分享图片

定义aaa.com.conf:vim aaa.com.conf //增加如下内

location ~ \.php$

   {

       include fastcgi_params;

       fastcgi_pass unix:/tmp/aming.sock; //定义aming.sock

       fastcgi_index index.php;

       fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;

   }

技术分享图片

这样设置后当www的pool用完后,不会影响到aming.com的pool

设置多个子配置文件:

vim /usr/local/php-fpm/etc/php-fpm.conf //在[global]部分增加

include = etc/php-fpm.d/*.conf

技术分享图片

删除剩下的2个pool设置

mkdir /usr/local/php-fpm/etc/php-fpm.d/ //创建php-fpm.d目录

cd php-fpm.d

分别创建www.conf和 aming.conf

技术分享图片

技术分享图片

检查配置文件:/usr/local/php-fpm/sbin/php-fpm -t

技术分享图片

重启:service php-fpm restart

技术分享图片

效果跟写在主配置文件里是一样的

技术分享图片

这样就有两个子配置文件,也就是说有两个pool了,第一个pool监听了/tmp/php-fcgi.sock,第二个pool 监听了/tmp/aming.sock这样,就可以在Nginx不同的虚拟主机中调用不同的pool,从而达到相互隔离的目的,两个pool互不影响。

12.22 php-fpm慢执行日志

Php-fpm的慢执行日志用得非常多,它可以帮助你快速地追踪到问题点。

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //加入如下内容

request_slowlog_timeout = 1

slowlog = /usr/local/php-fpm/var/log/www-slow.log

/usr/local/php-fpm/sbin/php-fpm –t

service php-fpm restart

技术分享图片

查看日志文件是否生成:ls /usr/local/php-fpm/var/log/

技术分享图片

模拟php脚本:

vim /data/wwwroot/test.com/sleep.php //写入如下内容

<?php

echo "test slow log";

sleep(2);

echo "done";

?>

执行:curl -x 127.0.0.1:80 test.com/sleep.php

技术分享图片

出现错误,排查

打开配置文件:vi /usr/local/php-fpm/etc/php.ini

display_errors = On //查找display_errors,找到后修改参数为On,这样能在浏览器中看到具体的错误信息。默认是关闭的,不能让别人通过浏览器看到你的错误信息,而是要把错误信息记录到服务器的某个文件里

技术分享图片

再次执行sleep.php,显示错误,修改sleep.php文件

技术分享图片

技术分享图片

cat /usr/local/php-fpm/var/log/www-slow.log //查看日志文件

[17-Mar-2018 14:17:48]  [pool www] pid 2608

script_filename = /data/wwwroot/test.com/sleep.php //脚本路径和名字

[0x00007f3cce4002e0] sleep() /data/wwwroot/test.com/sleep.php:3 //脚本的第3行慢

12.23 open_basedir

在前面据讲述过open_basedir的概念,它的目的就是安全。Httpd可以针对每个虚拟主机设置一个open_basedir,php-fpm同样也可以针对不同的pool设置不同的open_basedir

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //加入如下内容

php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/

重启:service php-fpm restart

再次执行:curl -x 127.0.0.1:80 test.com/3.php //正常了

技术分享图片

配置错误日志

修改配置文件:vi /usr/local/php-fpm/etc/php.ini

display_errors = Off //改回off

技术分享图片

error_log = /usr/local/php-fpm/var/log/php_errors.log //定义error_log路径和文件名

技术分享图片

error_reporting = E_ALL //定义日志级别:所有

技术分享图片

修改www.conf文件一个错误的地址:vim www.conf

php_admin_value[open_basedir]=/data/wwwroot/wwtest.com:/tmp/

查看error_log路径:

grep error_log /usr/local/php-fpm/etc/php.ini

技术分享图片

ls /usr/local/php-fpm/var/log/

技术分享图片

没有生成,那要手动生成日志文件,并更改权限777

touch /usr/local/php-fpm/var/log/php_errors.log

chmod 777 /usr/local/php-fpm/var/log/php_errors.log

重启服务:

技术分享图片

curl -x 127.0.0.1:80 test.com/3.php -I //报404错

技术分享图片

查看日志:cat /usr/local/php-fpm/var/log/php_errors.log

技术分享图片

改回来就正常了

技术分享图片

12.24 php-fpm进程管理

pm = dynamic   //动态进程管理,也可以是static

pm.max_children = 50 //最大子进程数,ps aux可以查看

pm.start_servers = 20 //启动服务时会启动的进程数

pm.min_spare_servers = 5 //定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。

pm.max_spare_servers = 35 //定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。

pm.max_requests = 500  //定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。

第一行,定义php-fpm的子进程启动模式,dynamic为动态模式;一开始只启动少量的子进程,根据实际需求,动态地增加或者减少子进程,最多不会超过pm.max_children定义的数值。另外一种模式为static,这种模式下子进程数量由pm.max_children决定,一次性启动这么多,不会减少也不会增加。pm.start_servers针对dynamic模式,它定义php_pm服务在启动服务时产生的子进程数量。

pm.min_spare_servers针对dynamic模式,它定义在空闲时段子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。pm.max_spare_servers也是针对dynamic模式的,它定义在空闲时段子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。 pm.max_requests针对dynamic 模式,它定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程中最多可以处理这么多请求,当达到这个数值时,它会自动退出。


以上是关于2018.3.19 13周1次课的主要内容,如果未能解决你的问题,请参考以下文章

2018.3.13 12周2次课

2018.3.23 13周5次课

2017-12-13 1周3次课

2017.12.13 1周3次课

2018.3.22 13周4次课

2018.4.13 16周3次课