12.21 php-fpm的pooljavascript
12.22 php-fpm慢执行日志(测试时报错)php
12.23 open_basedircss
12.24 php-fpm进程管理html
12.21 php-fpm的pool:java
php-fpm里的pool也叫池子,我们以前加入过www的配置,这个www就叫poollinux
Nginx能够设置不一样的站点,每一个站点均可以设置不一样的pool。好处是当其中一个站点502了(资源耗尽了),若是全部的网站都使用了同一个池子,那么其中一个网站发生了故障,就会把资源耗尽,就会形成其余的站点502。因此有必要把每个站点隔离开来,每个站点使用单独的poolnginx
设置多个pool的目的是,防止发生502(资源耗尽)。一个pool只能接受50个访问请求若是再有一个请求会502。另外的pool不受影响vim
vim /usr/local/php-fpm/etc/php-fpm.d///在[global]部分增长浏览器
include = etc/php-fpm.d/*.confbash
mkdir /usr/local/php-fpm/etc/php-fpm.d/
cd /usr/local/php/etc/php-fpm.d/
vim www.conf //内容以下
[www]
listen = /tmp/www.sock //相应的在Nginx的虚拟主机文件里(php相关的),监听也选择为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 axin.conf //内容以下
[axin]
listen = /tmp/axin.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/sbin/php-fpm –t
/etc/init.d/php-fpm restart
实例:
[root@localhost ~]# cd /usr/local/php-fpm/etc/
[root@localhost etc]# ls
pear.conf php-fpm.conf php-fpm.conf.default php.ini
[root@localhost etc]# cat php-fpm.conf 打开php-fpm的配置文件
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www] 以前定义的www,就是一个pool(池子)
#listen = /tmp/php-fcgi.sock 每一个pool能够监听不一样的sock或者是IP
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@axinlinux-01 etc]# vim php-fpm.conf
[axin.com] 复制以前的【www】。更名字和listen
listen = /tmp/axin.sock
#listen = 127.0.0.1:9000
[root@localhost etc]# /usr/local/php-fpm/sbin/php-fpm -t
[26-Jul-2019 09:16:38] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@localhost etc]# /etc/init.d/php-fpm reload
[root@localhost etc]# /etc/init.d/php-fpm stop
[root@localhost etc]# /etc/init.d/php-fpm start
Reload service php-fpm done
[root@localhost etc]# ps aux |grep php-fpm 会显示两个pool,最右侧会有咱们设置的axin.com
root 2111 0.0 0.5 229612 5052 ? Ss 13:15 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf) php-fpm 2112 0.0 0.4 229552 4732 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2113 0.0 0.4 229552 4732 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2114 0.0 0.4 229552 4732 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2115 0.0 0.4 229552 4732 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2116 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2117 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2118 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2119 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2120 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2121 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2122 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2123 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2124 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2125 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2126 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2127 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2128 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2129 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2130 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2131 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool axin.com php-fpm 2132 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool www php-fpm 2133 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool www php-fpm 2134 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool www php-fpm 2135 0.0 0.4 229552 4736 ? S 13:15 0:00 php-fpm: pool www php-fpm 2136 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool www php-fpm 2137 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool www php-fpm 2138 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool www php-fpm 2139 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool www php-fpm 2140 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool www php-fpm 2141 0.0 0.4 229552 4740 ? S 13:15 0:00 php-fpm: pool www php-fpm 2142 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www php-fpm 2143 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www php-fpm 2144 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www php-fpm 2145 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www php-fpm 2146 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www php-fpm 2147 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www php-fpm 2148 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www php-fpm 2149 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www php-fpm 2150 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www php-fpm 2151 0.0 0.4 229552 4744 ? S 13:15 0:00 php-fpm: pool www root 2737 0.0 0.0 112724 992 pts/1 R+ 13:41 0:00 grep --color=auto php-fpm
如今是两个不一样的池子,那怎么去用呢?(如下)
[root@localhost etc]# vim /usr/local/nginx/conf/vhost/test.com.conf 去nginx的虚拟主机test.com.conf定义fastcgi_pass为sock
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 /data/wwwroot/test.com$fastcgi_script_name;
}
[root@localhost etc]# cd /usr/local/nginx/conf/vhost/
[root@localhost vhost]# vim aaa.com.conf 在去定义aaa.com.conf,加上php的模块
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/axin.sock; 在这里改成axin.sock。这样两个站点就隔离开了
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
} 这要改成default
这样两个站点就隔离开了
server { listen 80 default_server; server_name aaa.com; index index.html index.htm index.php; root /data/wwwroot/default; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/axin.sock; #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name; } }
那么,好比test.com.conf([www])比较忙,50个服务已经满了,可是还有新的进程进来,就会报502。由于没有多余的php进程给他提供服务了。而咱们新建的这个aaa.com.conf([axin.com])不受影响,由于他使用的另一个pool。这就是为何要定义多个pool的缘由
咱们在Nginx主配置文件里加入了 include = etc/php-fpm.d/*.conf,那php-fpm也支持
[root@localhost vhost]# cd ..
[root@localhost conf]# tail nginx.conf
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
include vhost/*.conf; 在nginx里咱们加入了include
}
[root@localhost conf]# vim /usr/local/php-fpm/etc/php-fpm.conf
在[global]部分增长include = etc/php-fpm.d/*.conf
[root@localhost conf]# cat /usr/local/php-fpm/etc/php-fpm.conf 先cat出来
[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
[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
[axin.com]
listen = /tmp/axin.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@localhost conf]# vim /usr/local/php-fpm/etc/php-fpm.conf 删除[www]和[axin.com](100dd)
[root@axinlinux-01 etc]# cd /usr/local/php-fpm/etc/ 进入到etc下
[root@localhost etc]# mkdir php-fpm.d 由于include路径为php-fpm.d的目录下,多以要建立php-fpm.d的目录
[root@localhost etc]# cd php-fpm.d/ 进入到php-fpm.d目录下
[root@localhost php-fpm.d]# vim www.conf ,把刚才cat的php-fpm的配置文件里的[www]的部分拷贝进来
[root@localhost php-fpm.d]# vim axin.conf ,把刚才cat的php-fpm的配置文件里的[axin.conf]的部分拷贝进来
[root@localhost php-fpm.d]# ls 这样看着就很干净了,相似于nginx的vhosts
axin.conf www.conf
[root@localhost vhost]# /usr/local/php-fpm/sbin/php-fpm -t
[20-Aug-2018 16:02:25] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
报错
1.!!阿鑫作到这有报错,报错是vim两个.conf文件的时候,没有检查是否复制彻底.
2.报错有另外一个axin
[26-Jul-2019 10:34:40] ERROR: [pool www] unable to set listen address as it's already used in another pool 'axin.com' [26-Jul-2019 10:34:40] ERROR: failed to post process the configuration [26-Jul-2019 10:34:40] ERROR: FPM initialization failed
怀疑是
[root@localhost etc]# /etc/init.d/php-fpm reload 没有重启起来
[root@localhost etc]# /etc/init.d/php-fpm stop
[root@localhost etc]# /etc/init.d/php-fpm start
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12.22 php-fpm慢执行日志:(很是有用)
作php的网站建议使用LNMP,由于咱们能够分析php的慢执行日志。由于在运维中,常常会遇到公司的网站访问慢了,能找到到底什么地方慢了,因此慢执行日志很是重要。像系统负载高咱们能够用vmstat或top卡那个进程致使的。那php网站
~1. vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//好比针对[www]。加入以下内容
request_slowlog_timeout = 1 超过一秒钟记录日志
slowlog = /usr/local/php-fpm/var/log/www-slow.log 记录的日志放在这个路径下
~2.vi /usr/local/nginx/conf/nginx.conf
配置nginx的虚拟主机test.com.conf,把unix:/tmp/php-fcgi.sock改成unix:/tmp/www.sock (这一步阿明并无作,阿鑫作了报502,不作报404)
~3.从新加载nginx服务
/usr/local/nginx/sbin/nginx -t
./etc/init.d/nginx start
netstat -lntp |grep 80
~4.vim /data/wwwroot/test.com/sleep.php//写入以下内容(模拟慢执行的脚本)
<?php echo “test slow log”;sleep(2);echo “done”;?> 为作测试,休眠2秒钟
~5.curl -x127.0.0.1:80 test.com/sleep.php
~6.cat /usr/local/php-fpm/var/log/www-slow.log 这个文件下就是咱们设置的慢日志
~~因此php通常执行时间介于1秒到两秒之间
实例:
[root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/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 在最下面加入这两行 slowlog = /usr/local/php-fpm/var/log/www-slow.log
[root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t 测试有无语法错误
[26-Jul-2019 11:45:48] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@localhost ~]# ls /usr/local/php-fpm/var/log/ 检测路径下的慢日志文件是否被建立
php-fpm.log www-slow.log 对应咱们加入的路径的慢日志文件
[root@localhost ~]# cat /usr/local/nginx/conf/vhost/test.com.conf [www]被test所使用,因此咱们看一下他的路径。好测试他的休眠时间
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 /data/wwwroot/test.com$fastcgi_script_name; 在这个路径下
}
[root@localhost ~]# vim /data/wwwroot/test.com/sleep.php 在查到的这个路径下建立写试用的休眠php文件
<?php
echo “test slow log”;
sleep(2);
echo “done”;
?>
!!此处有个知识点:
有错误的话,有个简单的方式。打开它的配置文件:
[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php.ini
搜索diapaly_errors,将=Off改成=On
display_errors = On
[root@localhost php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm done
在从新curlhi显示哪里错了
!!!正常生产换件是为Off的,由于不能再浏览器上显示错误日志,要把它放在服务器上的一个文件里!!!
[root@localhost ~]# curl -x127.0.0.1:80 test.com/sleep.php 报错502
<html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> <hr><center>nginx/1.8.0</center> </body> </html>
cat /usr/local/php-fpm/var/log/www-slow.log
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12.23 open_basedir:
以前讲过在php.ini里面定义open_basedir。若是服务器上有多个网站,那么在php.ini里面定义就不合适了,由于open_basedir的做用是限定php在指定的目录里活动。因此要么在Apache虚拟主机配置文件里定义,要么在php-fpm的配置文件里定义。那么咱们能够针对每一个池子定义不一样的open_basedir:
~1. vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入以下内容
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
([www]这个池子,是test.com.conf在用着,因此要写test.com)
~2.建立测试php脚本,进行测试
~3.再次更改aming.conf,修改路径,再次测试
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
~4.配置错误日志
~5.再次测试
~6.查看错误日志
把open_basedir的错误日志定义上
1. vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入以下内容
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
([www]这个池子,是test.com.conf在用着,因此要写test.com)
2.vim /usr/local/php-fpm/etc/php.ini
display_errors = Off (改成Off)成产中为Off,不能再浏览器上显示错误日志。要在服务器的一个文件里显示
在搜索error_log
在;error_log = syslog 这一行下面写error_log = /usr/local/php-fpm/var/log/php_errors.log
也就是定义错误日志的路径。完成后要看一下日志是否生成。没有的话就要touch一个并chmod(防止他不能正常的写入)
[root@localhost log]# touch /usr/local/php-fpm/var/log/php_errors.log
[root@localhost log]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log
~3.vim /usr/local/php-fpm/etc/php.ini
在搜索error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT在这一行用分号注释掉。在下面加上:
error_reporting =E_ALL (也就是日志级别,为全部)
最后要重启 /etc/init.d/php-fpm restart
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12.24 php-fpm进程管理:
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf:
[www]
listen = /tmp/www.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
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
~1. pm = dynamic //动态进程管理,也能够是static(以什么样的形式启动)(以分号注释)
好比结合下面的,一开始先启动几个,而后根据需求,好比访问量很大的时候自动的生成新的子进程。假如服务器比较闲的话(也就是说没用到他的时候),还能够自动的去销毁,当销毁到必定程度的时候还能够自动的生成一些新的。就是由这些参数来控制何时生成与销毁
pm = static //也能够改为静态的,就是一会儿生成这么多。可是改成static那么只有pm.max_children = 50这一行生效了,一下的都没有了(ps aux |grep php能够查看)
~2.pm.max_children = 50 //最大子进程数,ps aux能够查看
~3.pm.start_servers = 20 //启动服务时会启动的进程数
~4.pm.min_spare_servers = 5 //定义在空闲时段,子进程数的最少数量,若是达到这个数值时,php-fpm服务会自动派生新的子进程。
~5.pm.max_spare_servers = 35 //定义在空闲时段,子进程数的最大值,若是高于这个数值就开始清理空闲的子进程。(定义的是何时去销毁)
~6.pm.max_requests = 500 //定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多能够处理这么多请求,当达到这个数值时,它会自动退出。