运维日志管理php,Linux运维知识之linux的php-fpm的pool、慢执行日志、进程管理及open_basedir介绍...

本文主要向大家介绍了Linux运维知识之linux的php-fpm的pool、慢执行日志、进程管理及open_basedir介绍,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

php-fpm的pool

Nignx可以配置多个虚拟主机,php-fpm同样也支持配置多个pool,每一个pool可以监听一个端口,也可以监听一个socket。

php-fpm配置说明:

和LAMP不同的是,在LNMP架构中,php-fpm作为独立的一个服务存在,既然是独立服务,那么它必然有自己的配置文件。php-fpm的配置文件为/usr/local/php-fpm/etc/php-fpm.conf,它同样也支持include语句,类似于nginx.conf里面的include。

1. 编辑配置文件

[root@gary-tao ~]# cd /usr/local/php-fpm/etc/

[root@gary-tao etc]# ls

pear.conf  php-fpm.conf  php-fpm.conf.default  php.ini

[root@gary-tao etc]# cat 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

[www]

listen = /tmp/php-fcgi.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

[root@gary-tao etc]# vim php-fpm.conf

//增加一个以下配置:

include = etc/php-fpm.d/*.conf

//include的这一行比较特殊,请注意等号后面的路径,必须写上etc目录,然后需要创建配置文件目录和子配置文件。

编辑好后把php-fpm.conf配置文件里的www以下pool删除,只留下[global]部分

2. 创建php-fpm.d目录及目录下文件

[root@gary-tao etc]# mkdir php-fpm.d

[root@gary-tao etc]# cd php-fpm.d

[root@gary-tao php-fpm.d]# vim www.conf

[root@gary-tao php-fpm.d]# vim aming.conf

[root@gary-tao php-fpm.d]# ls

aming.conf  www.conf

//两个文件分别增加内容如下:

[www]

listen = /tmp/php-fcgi.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

[aming.com]

listen = /tmp/aming.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

3. 如何把两个站点隔开

原有站点test.com.conf配置如下:

增加一个aaa.com.conf站点信息,操作如下:

[root@gary-tao php-fpm.d]# cd /usr/local/nginx/conf/vhost/

[root@gary-tao vhost]# ls

aaa.com.conf  ld.conf  proxy.conf  ssl.conf  test.com.conf

[root@gary-tao vhost]# vim aaa.com.conf

增加如下配置内容:

location ~ \.php$

{

include fastcgi_params;

fastcgi_pass unix:/tmp/aming.sock;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;

}

4. 测试语法

[root@gary-tao etc]# /usr/local/php-fpm/sbin/php-fpm -t

[09-Jan-2018 16:49:00] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

5. 重启php-fpm

[root@gary-tao etc]# /etc/init.d/php-fpm restart  //或/etc/init.d/php-fpm reload

Gracefully shutting down php-fpm . done

Starting php-fpm  done

6. 查看php-fpm启动状态

输入ps aux |grep php-fpm查看,显示的就有两个pool

php-fpm慢执行日志

通过php-fpm的慢执行日志,我们可以非常清晰地了解到PHP的脚本哪里执行时间长,它可以定位到具体的行。

1. 编辑配置文件

[root@gary-tao vhost]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //针对www文件做一个测试

增加如下内容:

request_slowlog_timeout = 1  //超过一秒中就会记录日志

slowlog = /usr/local/php-fpm/var/log/www-slow.log  //日志存放的路径

1. 测试语法

[root@gary-tao vhost]# /usr/local/php-fpm/sbin/php-fpm -t

[09-Jan-2018 19:15:14] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

2. 重启php-fpm

[root@gary-tao vhost]# /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

3. 配置nginx的虚拟主机test.com.conf,把unix:/tmp/php-fcgi.sock改为unix:/tmp/www.sock

4. 编写测试脚本

[root@gary-tao php-fpm.d]# vim /data/wwwroot/test.com/sleep.php

增加如下配置内容:

echo "test slow log";

sleep(2);

echo "done";

?>

5. 使用curl做测试

[root@gary-tao php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I  //访问的时候出现500,说明有语法错误。

HTTP/1.1 500 Internal Server Error

Server: nginx/1.12.1

Date: Tue, 09 Jan 2018 11:23:17 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

X-Powered-By: PHP/5.6.30

报错处理:

进入vim /usr/local/php-fpm/etc/php.ini

找到display_error,改为On,然后访问有错误主就会有输出信息

记得reload重新加载配置文件

测试出报错信息,因符号问题导致。

[root@gary-tao php-fpm.d]# /etc/init.d/php-fpm reload

Reload service php-fpm  done

[root@gary-tao php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php

Parse error:  syntax error, unexpected 'slow' (T_STRING), expecting ',' or ';' in /data/wwwroot/test.com/sleep.php on line 2

重新去更改配置文件vim /data/wwwroot/test.com/sleep.php的符号问题

查看慢执行日志

[root@gary-tao php-fpm.d]# cat /usr/local/php-fpm/var/log/www-slow.log  //慢执行日志里指出了哪个脚本运行慢,也指出了是哪一行执行慢

[09-Jan-2018 19:39:54]  [pool www] pid 81864

script_filename = /data/wwwroot/test.com/sleep.php

[0x00007f5987a07290] sleep() /data/wwwroot/test.com/sleep.php:3

[root@gary-tao php-fpm.d]# cat /data/wwwroot/test.com/sleep.php

echo "test slow log";

sleep(2);       //这个脚本超过1秒

echo "done";

?>

定义open_basedir

open_basedir的目的就是安全,只要在对应的Nginx虚拟主机配置文件中调用对应的pool,就可以使用open_basedir来物理隔离多个站点,从而达到安全目的。

1. 配置虚拟主机文件

[root@gary-tao php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

增加如下配置内容:

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

2. 使用curl测试

[root@gary-tao php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -I  //正常访问

HTTP/1.1 200 OK

Server: nginx/1.12.1

Date: Tue, 09 Jan 2018 12:32:50 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

X-Powered-By: PHP/5.6.30

3. 配置错误日志路径测试

增加错误路径

[root@gary-tao php-fpm.d]# vim /usr/local/php-fpm/etc/php.ini //增加错误日志路径及定义日志级别,如下图

进入到www.conf配置文件里面把test.com改为aming.com,再次测试,

查看错误日志

查看错误日志

[root@gary-tao php-fpm.d]# grep error_log /usr/local/php-fpm/etc/php.ini  //查看日志路径

; server-specific log, STDERR, or a location specified by the error_log

; Set maximum length of log_errors. In error_log information about the source is

;error_log = php_errors.log

;error_log = syslog

error_log = /usr/local/php-fpm/var/log/php_errors.log

; OPcache error_log file name. Empty string assumes "stderr".

;opcache.error_log=

[root@gary-tao php-fpm.d]# ls /usr/local/php-fpm/var/log/

php-errors.log  php-fpm.log  www-slow.log

[root@gary-tao php-fpm.d]# ls /usr/local/php-fpm/var/log/ //查看日志路径是否存在

php-fpm.log  www-slow.log

[root@gary-tao php-fpm.d]# touch /usr/local/php-fpm/var/log/php_errors.log  //手动建立一个日志文件

[root@gary-tao php-fpm.d]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log  //更改成所有权限,防止不能写入日志

[root@gary-tao php-fpm.d]# !curl

curl -x127.0.0.1:80 test.com/3.php -I

HTTP/1.1 404 Not Found

Server: nginx/1.12.1

Date: Tue, 09 Jan 2018 13:05:05 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

X-Powered-By: PHP/5.6.30

[root@gary-tao php-fpm.d]# cat /usr/local/php-fpm/var/log/php_errors.log  //因为open_basedir限制的地址写错了,所有就会报错,访问出现404

[09-Jan-2018 13:05:05 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/3.php) is not within the allowed path(s): (/data/wwwroot/aming.com:/tmp/) in Unknown on line 0

[09-Jan-2018 13:05:05 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on lin

php-fpm进程管理

pm = dynamic //定义php-fpm的子进程启动模式,dynamic为动态进程管理,一开始只启动少量的子进程,根据实际需求,动态地增加或者减少子进程,最多不会超过pm.max_children定义的数值。另外一种模式是static,这种模式下子进程数量由pm.max_children决定,一次性启动这么多,不会减少也不会增加。

pm.max_children = 50 //最大子进程数,ps aux可以查看

pm.start_servers = 20 //针对dynamic模式,它定义php-fpm服务在启动服务时产生的子进程服务时产生的子进程数量。

pm.min_spare_servers = 5 //针对dynamic模式,定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。

pm.max_spare_servers = 35 //针对dynamic模式,定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。

pm.max_requests = 500 //针对dynamic模式,定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维Linux频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值