12.21 php-fpm的pool
12.22 php-fpm慢执行日志
12.23 open_basedir
12.24 php-fpm进程管理
12.21 php-fpm的pool
pool 池子可以监听不同的IP或者sock,假如服务器上有多个站点并同时一个池子来监听,当某个站点出现问题来耗尽系统资源时候,其他站点也会收到牵连。为了解决这个问题,可以设置多个pool让每个站点来使用独立的pool来监听。
步骤
1.进入php-fpm配置文件
1 | [root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.conf |
2.再添加一个池子
1 | [global] |
这里添加了一个kun1的pool
3.检查语法并加载配置文件
1 | [root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t |
4.查看是否启动两个池子
1 | [root@localhost ~]# ps aux |grep php-fpm |
5.让每个网站来定义独立的池子
这里我让test1.com定义www test2.com定义kun11
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[root@localhost ~]# vim /usr/local/nginx/conf/vhost/test1.com.conf
server
{
listen 80 default_server;
server_name test1.com;
index index.html index.htm index.php;
root /var/www/test1;
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/test1$fastcgi_script_name;
}
}
1 | [root@localhost ~]# vim /usr/local/nginx/conf/vhost/test2.com.conf |
为了让php-fpm的内容看起来简洁明了,可以让每个pool来建立对应的conf文件,和Nginx的定义多个站点类似
步骤
1.在php-fpm配置文件中添加include语句
1 | [root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.conf |
2.建立对应的目录和池
1 | [root@localhost ~]# mkdir /usr/local/php-fpm/etc/php-fpm.d/ |
3.把对应的池子的配置写入池子的文件中
1 | [root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf |
1 | [root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/kun1.conf |
4.检查语法并加载配置文件
1 | [root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t |
5.查看池子是否启动
1 | [root@localhost ~]# ps aux |grep php-fpm |
12.22 php-fpm慢执行日志
PHP的网站架构一般推荐使用LNMP,主要原因在于可以查看慢执行日志来分析网站变慢的原因。
步骤
1.在php-fpm配置文件添加语句
这里以站点test1.com为例子 对应他的php-fpm的配置文件是www.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
[www]
listen = /tmp/php-fcgi.sock
listen.mode = 666
;listen = 127.0.0.1:9000
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
slowlog = /usr/local/php-fpm/var/log/test1-slow.log
request_slowlog_timeout
表示超多指定秒数就记录日志 slowlog
表示日志存放路径
2.检查语法并加载配置文件
1 | [root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t |
测试
我们在test1.com站点中添加sleep.php页面,添加下面配置 test1.com的目录在/var/www/test1.com/
下1
2
3
4
5
6
7[root@localhost ~]# vim /var/www/test1/sleep.php
<?php
echo "test slow log";
sleep(2);
echo "done";
?>
使用curl命令访问sleep.php1
2[root@localhost ~]# curl -x 192.168.80.102:80 test1.com/sleep.php
test slow logdone
看看慢执行日志1
2
3
4
5[root@localhost ~]# tail /usr/local/php-fpm/var/log/test1-slow.log
[13-Jun-2018 21:01:39] [pool www] pid 1757
script_filename = /var/www/test1/sleep.php ##哪个脚本慢
[0x00007fbff8014090] sleep() /var/www/test1/sleep.php:3 ##脚本中哪行慢
12.23 open_basedir
open_basedir用来限制站点的目录。在LAMP中定义open_basedir是使用php.ini定义的,但多个站点时候就在站点定义的conf文件中定义。在LNMP架构中,我们定义open_basedir可以针对对应的池子里面定义,这样对应的的站点就会使用相应的open_basedir指定的目录来活动。
步骤
1.以test1.com站点为例,进入相应池子的配置文件中添加open_basedir语句
1 | [root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf |
2.检查语法并加载配置文件
1 | [root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t |
测试
创建test.php文件再使用crul命令1
2
3
4[root@localhost ~]# vim /var/www/test1/test.php
<?php
phpinfo();
?>
1 | [root@localhost ~]# curl -x 192.168.80.102:80 test1.com/test.php -I |
把open_basedir的目录路径改错 再试试curl命令1
php_admin_value[open_basedir]=/var/www/atest1:/tmp/
1 | [root@localhost ~]# curl -x 192.168.80.102:80 test1.com/test.php -I |
显示404状态码
php的错误日志在php.ini的配置文件中配置并找到下面几个参数1
[root@localhost ~]# vim /usr/local/php-fpm/etc/php.ini
1 | log_errors = On ##定义启动错误日志,默认启动 |
看看PHP的错误日志1
2
3[root@localhost ~]# tail /tmp/php_error.log
[13-Jun-2018 14:44:54 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(/var/www/test1/test.php) is not within the allowed path(s): (/var/www/atest1:/tmp/) in Unknown on line 0
[13-Jun-2018 14:44:54 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
日志显示目录路径和open_basedir定义的路径不一致,因此把路径改一致就可以了
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的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。 |