设为首页 收藏本站
查看: 704|回复: 0

[经验分享] Linux学习总结(四十四)lnmp之php

[复制链接]

尚未签到

发表于 2018-12-12 07:48:23 | 显示全部楼层 |阅读模式
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.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   //写入内容如下,添加第一个pool

[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.conf

[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

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

request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
  第一行定义了超时时间,单位为秒,也就是当php脚本执行时间超过1秒就会记录日志
第二行定义该日志的路径和名称
我们编写一个php脚本测试

vim /data/wwwroot/test.com/slow.php

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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-650294-1-1.html 上篇帖子: 五十一、php 下篇帖子: php编程之短信发送接口调用流程的实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表