【LNMP】php-fpm的pool、php-fpm慢执行日志、php-fpm定义open_basedir和php-fpm进程管理
一、php-fpm的pool
进入目录/usr/local/php-fpm/etc,编辑php-fpm.conf文件:
vim /usr/local/php-fpm/etc/php-fpm.conf
在[global]部分增加:
include = etc/php-fpm.d/*.conf
再创建对应的目录php-fpm.d并进入这个目录下:
mkdir php-fpm.d
cd /usr/local/php/etc/php-fpm.d/
然后创建一个www.conf文件,输入内容如下:
[www]
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
继续编辑配置文件,内容如下
vim amo.conf
[amo]
listen = /tmp/amo.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
然后查看一下状态是否正确,再重启一下:
/usr/local/php-fpm/sbin/php-fpm –t
/etc/init.d/php-fpm restart
再来测试一下结果:
ps aux |grep php-fpm
二、php-fpm慢执行日志
编辑www.conf文件,加入如下内容
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
检测并重新加载:
模拟:
配置nginx的虚拟主机test.com.conf,把unix:/tmp/php-fcgi.sock改为unix:/tmp/www.sock ,重新加载nginx服务 。
(因为php-fcgi正在被/data/wwwroot/test.com 使用,所以直接在这个目录下新建一个配置文件来实验,不用修改内容)
cat /usr/local/nginx/conf/vhost/test.com.conf
新建一个php并写入如下内容:
vim /data/wwwroot/test.com/sleep.php
<?php
echo "test slow log";
sleep(2);
echo "done";
?>
再来检测一下状态结果并查看日志:
(检测的时候会有2秒的停顿)
curl -x127.0.0.1:80 test.com/sleep.php
cat /usr/local/php-fpm/var/log/www-slow.log
三、php-fpm定义open_basedir
我们以/data/wwwroot/test.com/3.php来实验:
编辑www.conf 配置文件并加入如下内容:
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
创建测试php脚本,进行测试,我们以/data/wwwroot/test.com/下的3.php文件测试:
测试:curl -x127.0.0.1:80 test.com/3.php -I ,OK
接下来我们做一个错误的实验:
再次更改www.conf,定义一个错误的open_basedir路径
重启一下php-fpm:
测试:
配置错误日志,把display_errors 改为Off(正常的线上环境建议是off,不让错误日志显示在浏览器上让别人看到)
vim /usr/local/php-fpm/etc/php.ini
再定义一下error_log 的路径放在哪里:
再定义error_reporting 为所有,并且把之前的error_reporting 注释掉,用分号:
然后确认一下对应的路径有没有文件,没有的话,创建一个文件,再赋予777权限,避免不能正常写入,然后再重启一下php-fpm服务:
(截图里有点小错误,应该是php_errors.log 而不是php.errors.log )
再次测试,显示404错误:
然后查看错误日志:
cat /usr/local/php-fpm/var/log/php_errors.log
四、php-fpm进程管理
动态进程管理,也可以是static
pm = dynamic
最大子进程数,ps aux可以查看
pm.max_children = 50
启动服务时会启动的进程数
pm.start_servers = 20
定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程
pm.min_spare_servers = 5
定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程
pm.max_spare_servers = 35
定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出
pm.max_requests = 500