2018-3-19 13周1次课 php-fpm的pool、慢日志、进程、open_basedir

12.21 php-fpm的pool


php-fpm支持定义多个pool,每个pool可以监听不同的socket或者不同的tcp/ip;

如果nginx有多个不同的站点,那么每个站点都可以使用一个pool;

如果所有网站都使用了同一个pool,当其中给一个php资源不够了,或者其他原因导致502了,网站出问题了,那么所有站点都不能正常使用了;

因此我们有必要把不同的站点隔离开,使用不同pool。

设置多个pool:

[[email protected] ~]# vim /usr/local/php-fpm/etc/php-fpm.conf

[[email protected] ~]# /usr/local/php-fpm/sbin/php-fpm -t
[17-Mar-2018 22:31:02] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[[email protected] ~]# /etc/init.d/php-fpm reload
Reload service php-fpm  done
[[email protected] ~]# ps aux|grep php-fpm

此时有两个pool能够使用,那么将另外一个站点定义在aming.com这个pool下

[[email protected] ~]# vim /usr/local/nginx/conf/vhost/aaa.com.conf

为了让不同的pool能够显示的更加清楚,可以把不同pool的参数信息分开到不同的conf中

[[email protected] ~]# cd /usr/local/php-fpm/etc/
[[email protected] etc]# mkdir php-fpm.d/
[[email protected] etc]# cd php-fpm.d/

然后将原先php-fpm.conf中定义的两个不同的pool差分开

[[email protected] php-fpm.d]# vim www.conf

[[email protected] php-fpm.d]# vim aming.conf

删除原先php-fpm.conf中pool的信息,并且在[global]中添加include = etc/php-fpm.d/*.conf

(这个类似于nginx中对不同vhost的配置方法)

[[email protected] php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.conf

[[email protected] php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[17-Mar-2018 23:00:48] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[[email protected] php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[[email protected] php-fpm.d]# ps aux|grep php-fpm

aming.com在www之前,因此pool生效了






12.22 php-fpm慢执行日志


目的:为了记录网站访问慢的原因,方便查找原因

·增加请求超时记录的配置:

[[email protected] ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

[[email protected] ~]# /usr/local/php-fpm/sbin/php-fpm -t
[18-Mar-2018 14:01:03] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[[email protected] ~]# /etc/init.d/php-fpm reload
Reload service php-fpm  done
[[email protected] ~]# ls /usr/local/php-fpm/var/log/
php-fpm.log  www-slow.log

写一个php脚本,模拟超过1秒的php执行

因为php-fcgi.sock被test.com这个站点使用者,因此在test.com下创建cleep.php

[[email protected] ~]# vim /data/wwwroot/test.com/sleep.php

[[email protected] ~]# curl -x127.0.0.1:80 test.com/sleep.php
test slow logdone[[email protected] ~]# cat /usr/local/php-fpm/var/log/www-slow.log
[18-Mar-2018 14:51:15]  [pool www] pid 1578
script_filename = /data/wwwroot/test.com/sleep.php
[0x00007f39874b9280] sleep() /data/wwwroot/test.com/sleep.php:2

(上方显示sleep.php脚本的第2行慢)

·一般请求时间request_slowlog_timeout = 定义大于2秒,因为大部分php执行时间介于1~2秒之间,定义大于2秒可以过滤掉很多不需要的信息。






12.23 open_basedir


[[email protected] ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

[[email protected] ~]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sun, 18 Mar 2018 07:11:24 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

·配置php-fpm错误日志:

·关闭显示错误:display_errors = Off

·选择记录日志级别:error_reportint = E_ALL

·打开错误日志开关:log_errors = On

·配置错误日志保存位置:error_log = /usr/local/php-fpm/var/log/php_errors.log

·错误日志路径如果不存在的话,需要重新创建

[[email protected] ~]# touch /usr/local/php-fpm/var/log/php_errors.log
[[email protected] ~]# chmod 777 !$
chmod 777 /usr/local/php-fpm/var/log/php_errors.log

·我们把www.conf中配置open_basedir改错,继续访问,查看错误日志

[[email protected] ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

[[email protected] ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[[email protected] ~]# curl -x127.0.0.1:80 test.com/3.php
No input file specified.
[[email protected] ~]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.12.2
Date: Sun, 18 Mar 2018 07:30:30 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
[[email protected] ~]# cat /usr/local/php-fpm/var/log/php_errors.log[object Object]

(路径不正确)

[[email protected] ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

[[email protected] ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[[email protected] ~]# !curl
curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sun, 18 Mar 2018 07:36:44 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

(可以访问)






12.24 php-fpm进程管理


·配置进程管理参数:

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

[[email protected] ~]# cat /usr/local/php-fpm/etc/php-fpm.d/www.conf

pm=dynamic 动态,一开始先启动20个,之后根据需求去生成或者销毁子进程

如果把dynamic改为static静态,那么红框中配置将不再生效,启动直接生成50个进程

[[email protected] ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

[[email protected] ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[[email protected] ~]# ps aux|grep php-fpm

(www这个pool有50个进程)

如有错误,欢迎指正,互相学习,共同进步!!!

原文地址:http://blog.51cto.com/11530642/2088737

时间: 2024-11-03 02:17:54

2018-3-19 13周1次课 php-fpm的pool、慢日志、进程、open_basedir的相关文章

2018.3.19 13周1次课

十三周一次课(3月19日) 12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理 12.21 php-fpm的pool 和LAMP不同的是,在LNMP架构中,php-fpm作为独立的一个服务存在.既然是独立服务,那么它必然于自己的配置文件.Php-fpm的配置文件是/usr/local/php/etc/php-fpm.conf,它同样也支持include语句.类似于nginx.conf里面的inclu

2018.4.19 17周2次课

十七周二次课(4月19日) 20.10 for循环 20.11/20.12 while循环 20.13 break跳出循环 20.14 continue结束本次循环 20.15 exit退出整个脚本 20.10 for循环 for循环结构是在日常运维工作中使用最频繁的循环结构. 语法:for 变量名 in 条件; do -; done 数字循环:vi for1.sh #!/bin/bash sum=0 for i in `seq 1 3` #循环的条件还可以引用系统命令的执行结果(如seq 1

2018.3.22 13周4次课

十三周四次课(3月22日) 13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令 13.1 设置更改root密码 root用户的mysql的超级管理员用户,跟linux的root用户类似.但需要区分,这个root用户和系统的root用户不是一个用户,需要注意.也可以创建一个普通用户来连接mysql 首次进入mysql数据库是不用密码的.默认mysql数据库的root用户密码为空,连接时不需要密码 设置密码: 启动mysql:service mysqld star

2018.3.23 13周5次课

十三周五次课(3月23日) 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复 13.4 mysql用户管理 MySQL创建用户以及授权 授权给ip grant all on *.* to 'user1'@'127.0.0.1' identified by 'passwd'; all表示所有的权限(如读.写.查询.删除等操作):on:后面跟的数据库名:有2个*,前者表示所有的数据库,后者表示所有的表:to:授权给后面的用户:user1:用户名:@'127.

2018.4.19 五周第二次课

yum更换国内源 首先先恢复昨天的实验,把yum备份恢复回来 [[email protected] ~]# cd /etc/yum.repos.d #进入到目录[[email protected] yum.repos.d]# ls #查看当前文件dvd.repo[[email protected] yum.repos.d]# rm -f dvd.repo #rm 删除 dvd.repo文件[[email protected] yum.repos.d]# cp /etc/yum.repos.d.b

2017.12.19 2周2次课

2017.12.19二周第二次课 2.10 环境变量PATH echo用来输出PATH的值.PATH前面的$是变量的前缀符号 1.你的命令在上述几个目录里面,在输入命令时就不用输入绝对路径,直接使用.因为在输入命令时,系统会在上述的几个目录里去寻找这个命令.当然也可以输入绝对路径 Copy命令[ls]到目录tmp下,并改名[ls2],二者实现的功能一样 直接输入命令[ls2],确不行.因为命令[ls2]不在"/usr/local/sbin:/usr/local/bin:/usr/sbin:/us

2018.4.16 16周4次课

十六周四次课(4月16日) 19.12 添加自定义监控项目 19.13/19.14 配置邮件告警 19.15 测试告警 19.16 不发邮件的问题处理 19.12 添加自定义监控项目 前面提到过zabbix的优势,其中之一就是很方便地添加自定义监控项目,它虽然提供了丰富的模板,但依然不能满足各种各样的特殊需求.比如,想要监控Nginx的访问日志条数,此类个性化需求在zabbix的模板中是没有的.下面举一个实际的例子来教你添加自定义的监控项目,这涉及编写shell脚本.需求是:监控某台web服务器

2018.4.23 17周4次课

十七周4次课(4月23日) 20.20 告警系统主脚本 20.21 告警系统配置文件 20.22 告警系统监控项目 20.20 告警系统主脚本 创建告警系统的目录: [[email protected] /usr/local/sbin]# mkdir mon [[email protected] /usr/local/sbin]# ls mon  nginx_log_rotate.sh [[email protected] /usr/local/sbin]# cd mon [[email pro

2018.1.9 5周2次课

五周第二次课(1月9日) 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装 7.6 yum更换国内源 1.恢复之前备份的文件 2. 进入"/etc/yum.repos.d"目录 3.删除"CentOS-Base.repo"文件 4.下载"163.repo"文件 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo curl -O http://mirrors

2018.1.16 6周2次课

六周第二次课(1月16日) 9.4/9.5 sed 9.4/9.5 sed 其实grep工具的功能还不够强大,它实现的只是查找功能,而不能把查找的内容替换.以前用vim操作文档的时候,可以查找也可以替换, 但只限于在文本内部操作,而不能输出到屏幕上.sed工具以及后面要介绍的awk工具就能把替换的文本输出到屏幕上,而且还有其他更丰富的功能.sed和awk都是流式编辑器,是针对文档的行来操作的. sed  '/x/'p filename:匹配x字符 sed  -n  '/x/'p  filenam