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

转载于:https://blog.51cto.com/12606610/2111108

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

  1. Cty的Linux学习笔记(十四)

    Linux学习笔记--第十四篇 环境变量配置文件: /etc/profile:预设了几个重要的变量,例如PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE ...

  2. 虚拟内存——Windows核心编程学习手札之十四

    虚拟内存 --Windows核心编程学习手札之十四 系统信息 有些操作系统的值是根据主机而定的,如页面大小.分配粒度大小等,这些值不用硬编码形式,进程初始化时应检索这些值以使用.函数GetSystem ...

  3. Windows保护模式学习笔记(十四)—— 阶段测试

    Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...

  4. OpenCV学习笔记(十四):重映射:remap( )

    OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...

  5. QT学习笔记(十四):QLayout的属性介绍

    QT学习笔记(十四):QLayout的属性介绍 主要包括QBoxLayout.和QGridLayout以及QFormLayout等的参数类似. 我主要说明一下QGridLayout在QtDesigne ...

  6. MATLAB学习笔记(十四)

    MATLAB学习笔记(十四) 一.线性方程组求解 1.1 直接法 1.1.1 利用左除运算符 1.1.2 利用矩阵分解 1.2 迭代法 1.2.1 雅可比(Jacobi)迭代法 1.2.2 高斯-赛德 ...

  7. python数据挖掘学习笔记】十四.Scipy调用curve_fit实现曲线拟合

    #2018-03-28 10:02:08 March Wednesday the 13 week, the 087 day SZ SSMR python数据挖掘学习笔记]十四.Scipy调用curve ...

  8. JavaScript学习(八十四)—变量

    JavaScript学习(八十四)-变量 一.什么是变量? 白话: 变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器. 我们通过 变量名 获取数据,甚至数据可以修改. 二.变量在内存中的存储 ...

  9. JavaScript学习(七十四)—递归函数

    JavaScript学习(七十四)-递归函数 一.什么是递归? 如果一个函数可以在内部调用其本身,那么这个函数就是递归函数,简单地说,函数内部自己调用自己,这个函数就是递归函数 由于递归很容易发生&q ...

  10. JavaScript学习(六十四)—关于JS的浮点数计算精度问题解决方案

    JavaScript学习(六十四)-关于JS的浮点数计算精度问题解决方案 您的语言没有中断,它正在执行浮点数学运算.计算机只能本地存储整数,因此它们需要某种表示十进制数字的方式.此表示并不完全准确.这 ...

最新文章

  1. 华人博士生首次尝试用两个Transformer构建一个GAN
  2. c语言 dll注入,教大家写一个远程线程的DLL注入,其实还是蛮简单的……………………...
  3. [译] 曝光!UX 行话大全
  4. android 图片识别白色区域进行裁剪_【研途技能贴】| 4款好用的图片处理软件推荐...
  5. 基于城市交通监控大数据的行程时间估计
  6. VOIP术语及相关知识
  7. @transactional注解原理_《Spring源码解析(十二)》深入理解Spring事务原理,告别面试一问三不知的尴尬...
  8. 饮用水配送管理系统项目解决方案
  9. c语言 mongodb,MongoDB的C语言编程实例
  10. 虚拟偶像发展史:TA们到底如何成功?万字复盘
  11. 分享PC魔音Morin v2.6.5听歌·音乐神器
  12. PcShare服务端改造
  13. UML 核心元素之参与者
  14. java 正则表达式电话邮箱_Java编程:正则表达式判断邮箱及电话号码是否有效
  15. Qt:Windows编程—Qt实现注册表启动项管理
  16. flutter 仿照智行app 首页
  17. 人物渲染篇(一) —— 基础卡通渲染 上
  18. 淘宝买的AC+退款经历
  19. 经典乘法口诀表(C++)
  20. node更改html中的列表,HTMLCollection和NodeList

热门文章

  1. Swing透明和变换
  2. 通过分析系统日志,统计你的电脑开机时间的小程序PC PowerOn Time,附源码
  3. ST算法 Sliding Window algorithm template
  4. 浅析JS模块规范:AMD,CMD,CommonJS
  5. bootstrap 学习 ---css样式学习
  6. h5 做app时和原生交互的小常识。
  7. APPIUM+Python+HTMLTestRunner(转)
  8. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
  9. GIve Me A Welcome Hug!
  10. Cas单点登录的服务器端和客户端的配置