php-fpm的pool(连接池)

我们查看php的进程时,会发现,在最后一个pool的选项,而这个就是我们在php-fpm配置文件里写的一个连接池。

  1. [root@bogon linux.com]# vim /usr/local/php-fpm/etc/php-fpm.conf
  2. [root@bogon linux.com]#
  3. [root@bogon linux.com]# ps aux|grep php
  4. root 3068 0.0 0.0 227144 228 ? Ss 211 0:10 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
  5. php-fpm 3114 0.0 0.0 229228 124 ? S 211 0:00 php-fpm: pool www

1.编辑php-fpm配置文件添加新pool命名为linux.com

  1. [linux.com]
  2. listen = /tmp/linux.sock
  3. #listen = 127.0.0.1:9000
  4. listen.mode = 666
  5. user = php-fpm
  6. group = php-fpm
  7. pm = dynamic
  8. pm.max_children = 50
  9. pm.start_servers = 20
  10. pm.min_spare_servers = 5
  11. pm.max_spare_servers = 35
  12. pm.max_requests = 500
  13. rlimit_files = 1024

2.检查php配置文件,重新加载配置文件,查看php进程发现有连个pool了

为什么要建立多个池子呢?拿www和linux.com两个池子来说,www池子最多可以同时开50个进程,当www进程满了就会报502错误,这个时候linux.com不受影响。

  1. [root@bogon linux.com]# /usr/local/php-fpm/sbin/php-fpm -t
  2. [13-Feb-2018 10:28:14] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
  3.  
  4. [root@bogon linux.com]# /etc/init.d/php-fpm reload
  5. Reload service php-fpm done
  6. [root@bogon linux.com]# ps -aux|grep php-fpm
  1. php-fpm 18117 0.0 0.5 229228 5076 ? S 10:29 0:00 php-fpm: pool www
  2. php-fpm 18118 0.0 0.5 229228 5076 ? S 10:29 0:00 php-fpm: pool www
  3. php-fpm 18119 0.0 0.5 229228 5076 ? S 10:29 0:00 php-fpm: pool www
  4. php-fpm 18120 0.0 0.5 229228 5072 ? S 10:29 0:00 php-fpm: pool linux.com
  5. php-fpm 18121 0.0 0.5 229228 5076 ? S 10:29 0:00 php-fpm: pool linux.com
  6. php-fpm 18122 0.0 0.5 229228 5076 ? S 10:29 0:00 php-fpm: pool linux.com

3.新建pool,编辑aaa.com.conf配置文件添加支持php配置

  1. [root@bogon vhost]# ls
  2. aaa.com.conf load.conf proxy.conf ssl.conf test.com.conf
  3. [root@bogon vhost]# vim aaa.com.conf
  4. [root@bogon vhost]#

  

  1. server
  2. {
  3. listen 80 default_server;
  4. server_name aaa.com;
  5. index index.html index.htm index.php;
  6. root /data/wwwroot/default;
  7.  
  8. location ~ \.php$
  9. {
  10. include fastcgi_params;
  11. fastcgi_pass unix:/tmp/linux.sock;
  12. fastcgi_index index.php;
  13. fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
  14. }
  15.  
  16. }

4.查看nginx配置文件可以看到有个include选项,php-fpm也是支持的

  1. [root@bogon conf]# vim nginx.conf
  2. [root@bogon conf]#
  1. gzip_types text/plain application/x-javascript text/css text/htm
  2. application/xml;
  3. include vhost/*.conf;
  4. }

5.编辑php-fpm.conf,在global标签下添加include选项

  1. [root@bogon conf]# vim /usr/local/php-fpm/etc/php-fpm.conf
  1. [global]
  2. pid = /usr/local/php-fpm/var/run/php-fpm.pid
  3. error_log = /usr/local/php-fpm/var/log/php-fpm.log
  4. include = etc/php-fpm.d/*.conf

6.将www配置和linux.com配置拆分开,在etc目录下创建php-fpm.d目录并创建两个配置文件www.conf和linux.conf,在配置文件中分别将拆分出来的配置写到里面

  1. [root@bogon conf]# cd /
  2. [root@bogon /]# cd usr/local/php-fpm/etc/
  3. [root@bogon etc]# ls
  4. pear.conf php-fpm.conf php-fpm.conf.default php.ini
  5. [root@bogon etc]# mkdir php-fpm.d
  6. [root@bogon etc]# cd php-fpm.d/
  7. [root@bogon php-fpm.d]# vi www.conf
  8. [root@bogon php-fpm.d]#
  1. [www]
  2. listen = /tmp/php-fcgi.sock
  3. #listen = 127.0.0.1:9000
  4. listen.mode = 666
  5. user = php-fpm
  6. group = php-fpm
  7. pm = dynamic
  8. pm.max_children = 50
  9. pm.start_servers = 20
  10. pm.min_spare_servers = 5
  11. pm.max_spare_servers = 35
  12. pm.max_requests = 500
  13. rlimit_files = 1024
  1. [root@bogon php-fpm.d]# vi linux.conf
    [linux.com]
  2. listen = /tmp/linux.sock
  3. #listen = 127.0.0.1:9000
  4. listen.mode = 666
  5. user = php-fpm
  6. group = php-fpm
  7. pm = dynamic
  8. pm.max_children = 50
  9. pm.start_servers = 20
  10. pm.min_spare_servers = 5
  11. pm.max_spare_servers = 35
  12. pm.max_requests = 500
  13. rlimit_files = 1024

7.删除php-fpm.conf配置文件中的www和linux.com配置

8.检查配置,重启php-fpm everyone ok

  1. [root@bogon php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
  2. [13-Feb-2018 11:39:14] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
  3.  
  4. [root@bogon php-fpm.d]# /etc/init.d/php-fpm restart
  5. Gracefully shutting down php-fpm . done
  6. Starting php-fpm done
  7. [root@bogon php-fpm.d]#

9.检查服务是否启动,发现一切ok

  1. [root@bogon php-fpm.d]# ps -aux|grep php-fpm
  2. root 23264 1.8 0.4 227232 4984 ? Ss 11:39 0:01 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
  3. php-fpm 23284 0.1 0.5 229256 5080 ? S 11:40 0:00 php-fpm: pool linux.com
  4. php-fpm 23285 0.0 0.5 229256 5080 ? S 11:40 0:00 php-fpm: pool linux.com
  5. php-fpm 23286 0.0 0.5 229256 5076 ? S 11:40 0:00 php-fpm: pool www
  6. php-fpm 23287 0.0 0.5 229256 5076 ? S 11:40 0:00 php-fpm: pool www

php-fpm慢执行日志

如果要做一个php网站,会推荐你用lnmp架构,原因就是可以分析php-fpm慢执行日志。因为在做运维工程师的生涯中,老板或者客户会经常反馈用户网站访问慢,慢执行日志则会记录为什么网站访问会慢。对运维工作是一个很大的帮助

1.针对www做实验,编辑www的配置文件,添加配置

  1. [root@bogon php-fpm.d]# vim www.conf
  2. [root@bogon php-fpm.d]#
  1. request_slowlog_timeout = 1 (连接超过1秒则记录日志)
  2. slowlog = /usr/local/php-fpm/var/log/www-slow.log (日志存放地址)

2.检查配置文件语法错误重启服务。

  1. [root@bogon php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
  2. [13-Feb-2018 13:34:07] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
  3.  
  4. [root@bogon php-fpm.d]# /etc/init.d/php-fpm reload
  5. Reload service php-fpm done
  6. [root@bogon php-fpm.d]#

3.查看是否生成了www-slow.log

  1. [root@bogon php-fpm.d]# ls /usr/local/php-fpm/var/log/
  2. php-fpm.log www-slow.log
  3. [root@bogon php-fpm.d]#

4.查看www.conf 中的php-fcgi.sock被谁用着,可见是被test.com.conf

  1. [root@bogon /]# ls /usr/local/php-fpm/etc/php-fpm.conf
  2. /usr/local/php-fpm/etc/php-fpm.conf
  3. [root@bogon /]# ls /usr/local/nginx/conf/vhost/test.com.conf
  4. /usr/local/nginx/conf/vhost/test.com.conf
  5. [root@bogon /]#

 

  1. 文件 /usr/local/nginx/conf/vhost/test.com.conf 
    location ~ \.php$
  2. {
  3. include fastcgi_params;
  4. fastcgi_pass unix:/tmp/php-fcgi.sock;
  5. fastcgi_index index.php;
  6. fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
  7. }

 

  1. 文件 /usr/local/php-fpm/etc/php-fpm.d/www.conf
    [www]
  2. listen = /tmp/php-fcgi.sock
  3. #listen = 127.0.0.1:9000
  4. listen.mode = 666
  5. user = php-fpm
  6. group = php-fpm
  7. pm = dynamic
  8. pm.max_children = 50
  9. pm.start_servers = 20
  10. pm.min_spare_servers = 5
  11. pm.max_spare_servers = 35
  12. pm.max_requests = 500
  13. rlimit_files = 1024
  14. request_slowlog_timeout = 1
  15. slowlog = /usr/local/php-fpm/var/log/www-slow.log

5.创建sleep.php文件写入sleep,休眠两秒钟

  1. [root@bogon local]# vim /data/wwwroot/test.com/sleep.php
  2. [root@bogon local]#
  3. <?php
  4. echo "test slow log";
  5. sleep(2);
  6. echo "done";

6.测试成功

  1. [root@bogon local]# curl -x127.0.0.1:80 test.com/sleep.php
  2. test slow logdone[root@bogon local]#

7.在页面查看php报错信息可以开启php配置文件中的display_errors = On

  1. [root@bogon local]# vim /usr/local/php-fpm/etc/php.ini
  2. [root@bogon local]#

8.查看慢日志

  1. [root@bogon local]# cat /usr/local/php-fpm/var/log/www-slow.log
  2.  
  3. [13-Feb-2018 14:14:50] [pool www] pid 31212
  4. script_filename = /data/wwwroot/test.com/sleep.php
  5. [0x00007f0a9bf742f8] sleep() /data/wwwroot/test.com/sleep.php:3
  6. [root@bogon local]#

open_basedir(将 PHP 所能打开的文件限制在指定的目录树,包括文件本身。

1.编辑test的配置文件添加配置内容,故意将tese.com写成111.test.com为了测试报错的情况

  1. [root@bogon local]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
  2. [root@bogon local]#

  

  1. php_admin_value[open_basedir]=/data/wwwroot/111test.com:/tmp/

2.编辑php配置文件,定义php-fpm的错误日志

  1. [root@bogon etc]# vim /usr/local/php-fpm/etc/php.ini

display_errors = Off (这一行的意思是将你的错误信息是否显示到浏览器上,不能让用户看到,所以一般是off)

error_log = /usr/local/php-fpm/var/log/php_errors.log (添加一行,定义记录错误日志的路径。)

error_reporting = E_ALL (定义日志级别,记录所有错误日志,默认为 ;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT) 

3.查看error_log 配置路径 

  1. [root@bogon etc]# grep error_log /usr/local/php-fpm/etc/php.ini
  2. ; server-specific log, STDERR, or a location specified by the error_log
  3. ; Set maximum length of log_errors. In error_log information about the source is
  4. ;error_log = php_errors.log
  5. ;error_log = syslog
  6. error_log = /usr/local/php-fpm/var/log/php_errors.log
  7. ; OPcache error_log file name. Empty string assumes "stderr".
  8. ;opcache.error_log=
  9. [root@bogon etc]#

4.创建错误日志文件,修改权限,防止不能正常写入。

  1. [root@bogon etc]# touch /usr/local/php-fpm/var/log/php_errors.log
  2. [root@bogon etc]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log
  3. [root@bogon etc]# /etc/init.d/php-fpm restart
  4. Gracefully shutting down php-fpm . done
  5. Starting php-fpm done
  6. [root@bogon etc]#

5.访问报404错误

  1. [root@bogon etc]# curl -x127.0.0.1:80 test.com/sleep.php -I
  2. HTTP/1.1 404 Not Found
  3. Server: nginx/1.12.2
  4. Date: Tue, 13 Feb 2018 07:38:46 GMT
  5. Content-Type: text/html; charset=UTF-8
  6. Connection: keep-alive
  7. X-Powered-By: PHP/5.6.30
  8.  
  9. [root@bogon etc]#

6.查看错误日志(意思是访问的文件不在open_basedir限制的目录)

  1. [root@bogon etc]# tail -2 /usr/local/php-fpm/var/log/php_errors.log
  2. [13-Feb-2018 07:38:46 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/sleep.php) is not within the allowed path(s): (/data/wwwroot/111test.com:/tmp/)
    in Unknown on line 0
  3. [13-Feb-2018 07:38:46 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
  4. [root@bogon etc]#

7.修改配置文件改成正确的目录名,编辑配置文件,将111test.com改为test.com

  1. [root@bogon etc]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
  2. [root@bogon etc]#

8.再次重启php-fpm,测试成功

  1. [root@bogon etc]# /etc/init.d/php-fpm restart
  2. Gracefully shutting down php-fpm . done
  3. Starting php-fpm done
  4. [root@bogon etc]# curl -x127.0.0.1:80 test.com/sleep.php -I
  5. HTTP/1.1 200 OK
  6. Server: nginx/1.12.2
  7. Date: Tue, 13 Feb 2018 07:49:46 GMT
  8. Content-Type: text/html; charset=UTF-8
  9. Connection: keep-alive
  10. X-Powered-By: PHP/5.6.30
  11.  
  12. [root@bogon etc]#

php-fpm进程管理

1.打开一个php-fpm的配置文件。

  1. [root@bogon etc]# vim php-fpm.d/www.conf
  2. [root@bogon etc]#
  3. [www]
  4. listen = /tmp/php-fcgi.sock
  5. listen = 127.0.0.1:9000
  6. listen.mode = 666
  7. user = php-fpm
  8. group = php-fpm
  9. pm = dynamic(进程以动态的形式启动,以下是他的配置,可以用静态static,那下面只有pm.max_children一行生效,一直保持50个子进程)
  10. pm.max_children = 50(最大子进程数)
  11. pm.start_servers = 20(一开始启动20个子进程)
  12. pm.min_spare_servers = 5(定义空闲时段,最低不能低于5个子进程,如果达不到,会自动派生新的子进程)
  13. pm.max_spare_servers = 35(定义空闲时段,最大值不能超过35个,如果高于35,会开始清理空闲子进程)
  14. pm.max_requests = 500(定义一个子进程最多处理的请求数,高于这个数值,它会自动退出)
  15. rlimit_files = 1024
  16. request_slowlog_timeout = 1
  17. slowlog = /usr/local/php-fpm/var/log/www-slow.log
  18. php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/

  

 

LNMP架构四的更多相关文章

  1. 第20章 使用LNMP架构部署动态网站环境

    章节概述: 本章节将从Linux系统的软件安装方式讲起,带领读者分辨RPM软件包与源码安装的区别.并能够理解它们的优缺点. Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳 ...

  2. nginx详解反向代理、负载均衡、LNMP架构上线动态网站(week4_day1_part1)-技术流ken

    nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...

  3. Linux(12):期中架构(4)--- 前端部分:HTTP & Nginx & LNMP架构

    HTTP协议概念原理说明 1. 当用户访问一个网站时经历的过程 # ①. 利用DNS服务,将输入的域名解析为相应的IP地址 a 本地主机输入域名后,会查询本地缓存信息和本地hosts b 本地主机会向 ...

  4. nginx详解反向代理,负载均衡,LNMP架构上线动态网站

    1.nginx介绍 nginx.org Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/ ...

  5. Linux centosVMware LNMP架构介绍、MySQL安装、PHP安装、Nginx介绍

    一. LNMP架构介绍 和LAMP不同的是,提供web服务的是Nginx 并且php是作为一个独立服务存在的,这个服务叫做php-fpm Nginx直接处理静态请求,动态请求会转发给php-fpm   ...

  6. 部署企业LNMP架构搭建bbs

    部署企业LNMP架构 1===============部署Nginx 2===============安装及部署Mysql数据库 3===============安装PHP解析环境 4======== ...

  7. 第十二章 LNMP架构之分离数据库

    一.课程回顾 1.搭建LNMP环境 1.配置官方源2.yum安装依赖3.yum安装nginx4.配置nginx5.创建用户6.启动并加入开机自启​7.上传安装包8.解压安装包9.卸载旧版本PHP10. ...

  8. 第十一章 LNMP架构基础介绍

    一.LNMP架构 1.简介 oLNMP是一套技术的组合,L=Linux.N=Nginx.M~=MySQL.P~=PHP不仅仅包含这些,还有redis/ELK/zabbix/git/jenkins/ka ...

  9. 基于LNMP架构搭建wordpress博客之安装架构说明

    架构情况 架构情况:基于LNMP架构搭建wordpress系统 软件包版本说明: 系统要求 :  CentOS-6.9-x86_64-bin-DVD1.iso PHP版本  :  php-7.2.29 ...

随机推荐

  1. [BZOJ1004](HNOI 2008) Cards

    Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目 前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张 ...

  2. [网络安全]NTP反射型DDOS攻击PPT

    给运维小组培训的NTP反射型DDOS攻击的PPT

  3. php中文件上传需要注意的几点

    1.首先要开启php.ini中的文件上传,打开php.ini 配置文件,查找 File Uploads ,在这个区域有以下3个选项: ;;;;;;;;;;;;;;;; ; File Uploads ; ...

  4. C#反射读取和设置类的属性

    C#反射技术的简单操作(读取和设置类的属性) http://www.cnblogs.com/william-lin/archive/2013/06/05/3118233.html 泛型方法通过反射创建 ...

  5. es6,async简单总结

    1.简单来讲就是把函数变为异步操作的 async function demo() { let result = Math.random(); console.log(result); } 2.asyn ...

  6. [Android Memory] Android系统中查看某个应用当前流量的方法

    转载自: http://blog.sina.com.cn/s/blog_628cc2b70101dbyy.html 一.查看原理:某个应用的网络流量数据保存在系统的/proc/uid_stat/$UI ...

  7. Android疑难杂症之KillProcess 和System.exit 无效

    以下所讲,浓缩在 https://github.com/wytings/CrashDemo 首先就这个名字来说,kill了process 或者 system.exit确实已经把APP杀掉了,特别是当你 ...

  8. Shell学习:read的选项及用法

    转摘: http://kb.cnblogs.com/a/2255702/ 1. Read的一些选项 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项. -a : ...

  9. 【实践】js实现windows系统日历

    思路:1.定义好每一个月份的日期天数 2.获取当前的系统日期初始化数据 3.输出日历    2.1.先获取当前月的第一天是星期几(这一点与日历的排版至关重要!)    2.2.获取当前月的天数    ...

  10. PAAS云服务平台

    云计算是一种可以方便.按需从网络訪问的.可配置的.共享的资源池(如网络.server.存储.应用程序和服务)模型,且仅仅需最少的管理(服务提供方交互)就可以高速供应和公布该模型. 云计算平台的核心部分 ...