分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

Linux学习总结(四十四)lnmp之php-fpm相关配置

发布时间:2023-09-06 01:52责任编辑:傅花花关键词:配置Linux
1 php-fpm的进程pool

之前我们在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 ?更改内容如下

[global]pid = /usr/local/php-fpm/var/run/php-fpm.piderror_log = /usr/local/php-fpm/var/log/php-fpm.loginclude = etc/php-fpm.d/*.conf

cd /usr/local/php-fpm/etc/
mkdir php-fpm.d
cd php-fpm.d/
vim www.conf ??//写入内容如下,添加第一个pool

[www]listen = /tmp/www.socklisten.mode = 666user = php-fpmgroup = php-fpmpm = dynamicpm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500rlimit_files = 1024

保存后 再编辑另外的配置文件,再创建一个pool
vim test.conf

[test]listen = /tmp/test.socklisten.mode = 666user = php-fpmgroup = php-fpmpm = dynamicpm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500rlimit_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

2php-fpm慢执行日志

如果一个php网站可以访问,就是访问速度变慢了,我们如何进一步去查找原因呢?有没有办法追踪到导致php解析变慢的细节,这里就涉及到php-fpm的慢执行日志。通过php-fpm的慢执行日志,我们可以清晰的了解到php的脚本哪里执行时间长,它可以定位到具体的代码行。如何开启和查看该日志,具体操作如下:
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
在最后面加入如下内容

request_slowlog_timeout = 1slowlog = /usr/local/php-fpm/var/log/www-slow.log

第一行定义了超时时间,单位为秒,也就是当php脚本执行时间超过1秒就会记录日志
第二行定义该日志的路径和名称
我们编写一个php脚本测试

 vim /data/wwwroot/test.com/slow.php<?phpecho "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.log

3open_basedir

之前在lamp中已经接触到该概念。配置它的目的就是为了网站安全。httpd可以针对每个虚拟主机设置一个open_basedir,php-fpm同样也可以针对不同的pool设置不同的open_basedir

vim /usr/local/php-fpm/etc/php-fpm.d/test.conf ?//在最后面加入php_admin_value[open_basedir] = /data/wwwroot/test.com:/tmp/

4php-fpm 错误日志

在lamp中我们给php单独定义过错误日志,我们在/usr/local/php-fpm/etc/php.ini中关闭错误信息的页面显示,定义错误日志路径和名称,定义日志级别。因为该配置文件与lamp中配置文件相同,都来源于php源码包中的php.ini-production文件,所以各配置与之前的相同。这里不再赘述。

5php-fpm 进程管理

下面我们介绍下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的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。

Linux学习总结(四十四)lnmp之php-fpm相关配置

原文地址:http://blog.51cto.com/12606610/2111108

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved