以前咱们在nginx 配置文件里加入了一句 include vhost/*.conf; 而后实现了各个虚拟主机的隔离,php-fpm 做为一个独立的服务,有没有相似的操做呢? 答案是确定的。这里咱们介绍一个php-fpm的 进程pool概念。pool 在lnmp架构,是分配出来解析php的进程资源集合。php-fpm能够设置多个pool,在其中一个pool资源耗尽,会致使其余站点没法访问资源,报502错误。有必要把站点进行分离,分别使用单独的pool。咱们能够在php-fpm.conf 中定义include,进而定义单独的pool。具体过程以下:
vim /usr/local/php-fpm/etc/php-fpm.conf 更改内容以下php
[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
cd /usr/local/php-fpm/etc/
mkdir php-fpm.d
cd php-fpm.d/
vim www.conf //写入内容以下,添加第一个poolnginx
[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
保存后 再编辑另外的配置文件,再建立一个pool
vim test.confvim
[test] listen = /tmp/test.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
这样有了两个子配置文件,也就是建立了两个pool了,两个pool监听了不一样的socket,咱们就能够在虚拟主机配置文件中给不一样的虚拟主机定义不一样的pool,从而达到互相隔离的目的。安全
测试下配置/usr/local/php-fpm/sbin/php-fpm -t
重启下服务/etc/init.d/php-fpm restart
查看下/tmp/下的sock文件:ls /tmp/*.sock
再来查看下进程
ps aux |grep php-fpm
发现出现了www和test 两个pool架构
若是一个php网站能够访问,就是访问速度变慢了,咱们如何进一步去查找缘由呢?有没有办法追踪到致使php解析变慢的细节,这里就涉及到php-fpm的慢执行日志。经过php-fpm的慢执行日志,咱们能够清晰的了解到php的脚本哪里执行时间长,它能够定位到具体的代码行。如何开启和查看该日志,具体操做以下:
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
在最后面加入以下内容curl
request_slowlog_timeout = 1 slowlog = /usr/local/php-fpm/var/log/www-slow.log
第一行定义了超时时间,单位为秒,也就是当php脚本执行时间超过1秒就会记录日志
第二行定义该日志的路径和名称
咱们编写一个php脚本测试socket
vim /data/wwwroot/test.com/slow.php <?php echo "just a slow running test"; sleep (3); ?> curl -x127.0.0.1:80 test.com/slow.php
发现光标停顿了几秒才输出了just a slow running test
咱们去查看下慢执行日志
cat /usr/local/php-fpm/var/log/www-slow.logide
以前在lamp中已经接触到该概念。配置它的目的就是为了网站安全。httpd能够针对每一个虚拟主机设置一个open_basedir,php-fpm一样也能够针对不一样的pool设置不一样的open_basedirphp-fpm
vim /usr/local/php-fpm/etc/php-fpm.d/test.conf //在最后面加入 php_admin_value[open_basedir] = /data/wwwroot/test.com:/tmp/
在lamp中咱们给php单独定义过错误日志,咱们在/usr/local/php-fpm/etc/php.ini中关闭错误信息的页面显示,定义错误日志路径和名称,定义日志级别。由于该配置文件与lamp中配置文件相同,都来源于php源码包中的php.ini-production文件,因此各配置与以前的相同。这里再也不赘述。学习
下面咱们介绍下php-fpm.conf中一段配置的含义
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的子进程最多能够处理这么多请求,当达到这个数值时,它会自动退出。