12.21 php-fpm的pool
php-fpm有一个概念叫pool,就是使用psaux看到的右侧的那一列,也就是它的池子,
如下图,我们在这里只定义了一个pool
其实他是支持定义多个池子的,每一个池子我们可以监听不同的sock,或者不同的tcpip,这样的话如果我们的nginx有好几个站点每个站点都可以使用不同pool,这样做的好处就是其中一个php502了,其他站点不收影响,(502很有可能是php资源不够了)如果你所有的网站都使用了同一个池子的话,其中一个网站发生了故障,比如程序员写的代码有问题把php资源耗尽了,那么其他几个也会502,所以我们有必要把网站隔离开来,每个站点使用单独的pool。
添加多个pool方法:
可以在如上图中的文件中继续添加,如再添加一个叫aming.com的pool就在文件内容后面添加如下一段。
然后我们检查错误,
然后重新加载。
然后我们看一下pool,可以看到右侧多了一个aming.com的pool。
那么我们怎么使用它呢?
首先然后,把test.com.conf定义成php-fcgi.sock
然后把另一个aaa.com.conf定义成aming.sock,(如果里面没有这一段那么就从test.com.conf里拷贝一下)
这样两个网站就隔离开了。
当然php-fpm也是支持include,
然后,之后进入到这个目录里,然后把php-fpm.conf里的www一段剪切到www.conf里,然后再把php-fpm.conf里的aming.com一段剪切到里面。
然后我们检查错误,
然后重新加载。这个效果是和第一种一样的。
12.22 php-fpm慢执行日志
我们首先
意思是超过一秒钟就要记录日志(如果在真实场景下我们建议是两秒,应该很多脚本执行都会超过一秒),然后放在第二行的地址里。
然后检查错误重新加载,之后我们可以看一下这个目录里有没有生成日志文件。有的话我们可以看看里面有没有内容。里面应该是空的,因为我们还没有任何超过一秒的php执行的过程,所以我们需要模拟一个慢执行的php。
那么我们就来写一个脚本,因为php-fcgi是被test.com用的,所以我们需要在这个站点下做操作。
我们做一个脚本故意让它执行休眠2秒
在里面写入我们可以把它分成三行
然后我们运行一下试试(如果没有任何输出就说明有错误)
里面有一行我们把它打开后,也就是改成on后,我们就可以在浏览器或者curl里显示错误。然后我们再运行,如下图提示我们语法错误
这里应该是我们的sleep.php标点符号写的是中文的标点,我们给它改成英文即可,然后我们再次运行,可以看出它执行过程是停顿了两秒的。
然后我们在看日志
现在里面就会有内容了,如下图
第二行告诉我们sleep.php脚本慢了,第三行说是这个脚本的第3行慢了。
我们可以看一下这个脚本的第三行是什么,如下图正是我们设定的休眠2秒。
12.23 open_basedir
open_basedir之前我们也介绍过,如果服务器有多个网站,那么在php.ini里定义就不合适了,所以要么在apache虚拟主机配置文件里定义,要么在php-fpm里定义,那么我们可以针对每一个池子定义open_basedir,
定义方法只要在www(也可以是其他池子)池子文件里加上,然后另起一行(这里的网站一定要写www这个文件对应的网站,上图并不是标准答案),如在加上它。然后检查错误之后重新加载,然后就可以访问了。
我们也可以看一下它的错误日志,我们先把里改成off关掉,(正常都是关闭的,因为不能让别人通过浏览器看到错误信息)然后我们定义一下错误日志路径,(把原来的注释一下,然后另起一行)
还要定义日志级别(这里我们定义成所有,我们把原来的注释一下,然后另起一行)
然后创建一下指定的错误日志路径文件
然后我们故意把在www.conf里定义的后面的网站改成其他网站
然后检查错误重新加载,然后访问一下就生成了错误日志,然后我们可以看一下错误日志
12.24 php-fpm进程管理
php-fpm进程管理就是php-fpm配置文件里,如www.conf里选中的几行。
第一行表示你的进程以什么样的形式启动,dynamic是动态,只有是动态的时候下面的全部参数才生效,如果改成static那么只有下面一条生效,也就是说启动的时候就一下生成50个。
dynamic动态时,下面20结尾的一行意思是默认启动20个,请求多的时候会增多,但是空闲的时候多于35会自动减少,下面5结尾的一行意思是最低不少于5个,500的一行意思是每一个子进程处理的请求数是500次,达到这个值就会自动退出。
当然这些参数后面的数字都是可以改的。
我们可以改一下,然后重新加载php-fpm,然后可以查看一下网站的进程数: