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

时间:2021-12-25 22:27:40

php-fpm的pool


  • 在LNMP架构中,php-fpm作为独立的一个服务。既然是独立服务,那么就必须拥有自己的配置文件。php-fpm的配置文件为/usr/local/php-fpm/etc/php-fpm.conf。
  • nginx可以配置多个虚拟主机,php-fpm同样也支持配置多个pool,每一个pool可以监听一个端口,也可以监听一个socket。nginx有多个站点,每个站点都可以使用一个pool,这样的好处是当其中一个PHP出现502状态码(很有可能是php资源不够了),如果多个网站使用同一个池子,那么其中一个网站出现问题,会耗尽php的资源,导致其他的网站也会502。这样就很有必要使每一个网站单数使用一个pool。
  • 设置多个pool,在php-fpm.conf中继续增加
    定义第2个pool
    十三周一次课(3月19日)
  • 检查语法是否正确,然后从重启或者reload
/usr/local/php-fpm/sbin/php-fpm  -t 

/etc/init.d/php-fpm reload 
  • 使用ps aux |grep php-fpm查看是否成功。

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

  • pool的使用
    在zcy.com.conf中配置成如下这样,就可以将2个站点隔离开
    十三周一次课(3月19日)
    一个池子pool不干涉另一个池子pool 。
  • 将php-fpm.conf中的2个pool拆分开2个子配置文件
    1 . 在php-fpm.conf中[global]里面增加include = etc/php-fpm.d/*.conf 并删除下面的2个池子
    十三周一次课(3月19日)
    2 . 创建这个php-fpm.d目录
mkdir /usr/local/php-fpm/etc/php-fpm.d

3 进入到php-fpm.d目录中创建www.conf 和zchuny.conf ,将之前php-fpm中删除的内容分别写入这2个文件中即可
十三周一次课(3月19日)

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

[root@chunt php-fpm.d]# mv www.com www.conf
[root@chunt php-fpm.d]# mv zchuny.com zchuny.conf
[root@chunt php-fpm.d]# 

这样就有2个子配置文件,也就是说有2个pool。这样可以在nginx不同的虚拟主机中调用不同的pool,从而达到相互隔离的目的。2个pool互不影响。



php-fpm慢执行日志

  • 做php的网站,最好使用LNMP,其中原因在于可以分析php的慢执行日志。如果网站突然很卡,又找不到问题所在,那么可以通过php-fpm的慢执行日志,了解到php的脚本哪里执行时间长,它可以定位到具体的行
  • 开启php-fmp慢执行日志。
    1. 在www.conf 中加入以下内容
request_slowlog_timeout = 1  //定义超时时间,既php的脚本执行时间超过1秒就会记录日志
slowlog = /usr/local/php-fpm/var/log/www-slow.log  //定义慢执行日志的路径和名字

2 . 检查并重新加载

[root@chunt php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[20-Mar-2018 01:05:04] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@chunt php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm  done
[root@chunt php-fpm.d]# 

3 . 查看日志是否生成

[root@chunt php-fpm.d]# ls /usr/local/php-fpm/var/log/
php-fpm.log  www-slow.log
[root@chunt php-fpm.d]# 

4 .写一个脚本用来模拟,因为www使用的是test的/tmp/php-fcig.sock。所以需要在/data/wwwroot/test.com目录中进行操作。
创建sleep.php,并写入以下内容


<?php echo "test slow log";sleep(2);echo "done"; ?>

5 .测试

[root@chunt php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 19 Mar 2018 17:20:14 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

[root@chunt php-fpm.d]# 

如果出现错误,可以打开/usr/local/php-fpm/etc/php.ini中的display_errors = off改为on ,这样就可以才浏览器中查看到错误所在。
6 . 查看日志

[root@chunt php-fpm.d]# cat /usr/local/php-fpm//var//log/www-slow.log 

[20-Mar-2018 01:20:13]  [pool www] pid 1966
script_filename = /data/wwwroot/test.com/sleep.php //哪个脚本慢
[0x00007fcb7eafe2e8] sleep() /data/wwwroot/test.com/sleep.php:1 //慢在第几行

[20-Mar-2018 01:26:54]  [pool www] pid 1961
script_filename = /data/wwwroot/test.com/sleep.php
[0x00007fcb7eafe2e8] sleep() /data/wwwroot/test.com/sleep.php:1
[root@chunt php-fpm.d]# 

注:很多额PHP监本执行时间介于1到2秒之间。


open_basedir

  • 关于它的定义可以在php-fpm里面或者是zchuny.conf里面,当服务器上有多个网站,那么在php.ini中去定义就有些不太合适了。
  • 配置过程
    1. 在zhuny.conf中最后加入以下内容
php_admin_value[open_basedir]=/data/wwwroot/zchuny.com:/tmp/

2 .测试

[root@chunt php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 19 Mar 2018 18:03:47 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

这一小节没有看懂


php-fpm进程管理

  1. 含义

pm = dynamic //定义php-fpm子进程的启动模式。dynamic为动态模式;一开启只启动少量的子进程,根据实际需要,动态的增加或减少子进程,最少不超过pm.max_children定义的值。另一模式是static,这种模式下进程数由pm.max_children确定,一次性启动这么多,不会减少或者增加
pm.max_children = 50
pm.start_servers = 20 //针对dynamic模式,它定义php-fpm服务在启动服务时产生的子进程数量。
pm.min_spare_servers = 5 //针对dynamic模式 它定义在空闲时段的子进程的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程
pm.max_spare_servers = 35 //针对dynamic模式,它定义在空闲时段子进程数的最大值,如果高于这个数值就开始清理空闲的子进程
pm.max_requests = 500 //针对dynamic模式,定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程中最多可以处理这么多请求,当达到这个数值时,它会自动退出。