LNMP架构(6) php-fpm的连接池pool设置,php-fpm慢执行日志,限定open_basedir,php-fpm进程管理

php-fpm的连接池pool设置
php-fpm服务可以设置多个pool,可以针对每个web服务器设置一个pool,从而将服务器隔离,在其中一个pool资源耗尽时也不会导致其他站点访问不了,出现502报错的状况。

1、编辑php-fpm配置文件
[root@aliyun ~]# 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
[www] 可以随便命名,主要看下方listen监听的套接字或端口跟哪个虚拟主机对应
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



[test] 配置test主机的pool 池,可随便命名,主要看下面listen监听的端口或套接字跟哪个网站对应
listen = /tmp/ test .sock 这里的监听地址也得改一下,也可以用 127.0.0.1:1234 的形式监听
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
2、测试语法,重载php-fpm服务,查看是否有进程
[root@aliyun ~]# /usr/local/php-fpm/sbin/php-fpm -t
[14-Jun-2018 21:24:08] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@aliyun ~]# service php-fpm reload
Reload service php-fpm done
[root@aliyun ~]# ps aux |grep php
root 15948 0.0 0.2 123456 4832 ? Ss 21:26 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 15949 0.0 0.2 123396 4572 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15950 0.0 0.2 123396 4576 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15951 0.0 0.2 123396 4576 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15952 0.0 0.2 123396 4576 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15953 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15954 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15955 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15956 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15957 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15958 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15959 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15960 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15961 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15962 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15963 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15964 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15965 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15966 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15967 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15968 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15969 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15970 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15971 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15972 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15973 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15974 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15975 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15976 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15977 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15978 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15979 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15980 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15981 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15982 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15983 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15984 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15985 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15986 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15987 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15988 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
root 15990 0.0 0.0 112660 968 pts/1 R+ 21:27 0:00 grep --color=auto php
[root@aliyun ~]#

第2种方法:
1、在php-fpm/etc/目录下创建php-fpm.d/目录
[root@aliyun ~]# mkdir /usr/local/php-fpm/etc/php-fpm.d/
2、编辑php-fpm.conf文件
[root@aliyun ~]# 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 加入这一行, 并剪切剩余的pool配置
保存退出

3、创建 pool池www的配置文件 www.conf
[root@aliyun ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
并粘贴www这部分
[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

4、创建pool池test的配置文件test.conf
[root@aliyun ~]# vim /usr/local/php-fpm/etc/php-fpm.d/test.conf
并粘贴test这部分
[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
5、编辑虚拟主机配置文件test.conf( 我这里之前没有配置test主机
[root@aliyun ~]# vim /usr/local/nginx/conf/vhost/test.conf
写入如下内容:

server
{
listen 80 ;
server_name test.com ;
index index.html index.htm index.php;
root /data/wwwroot/ test.com ;

location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/ test.sock ;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/ test.com $fastcgi_script_name;
}
access_log /data/logs/test.com.log combined_realip;
}
6、检测语法错误,重载php-fpm再查进程
[root@aliyun ~]# /usr/local/php-fpm/sbin/php-fpm -t
[14-Jun-2018 21:24:08] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@aliyun ~]# service php-fpm reload
Reload service php-fpm done
[root@aliyun ~]# ps aux |grep php
root 15948 0.0 0.2 123456 4832 ? Ss 21:26 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 15949 0.0 0.2 123396 4572 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15950 0.0 0.2 123396 4576 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15951 0.0 0.2 123396 4576 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15952 0.0 0.2 123396 4576 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15953 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15954 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15955 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15956 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15957 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15958 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15959 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15960 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15961 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15962 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15963 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15964 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15965 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15966 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15967 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15968 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool www
php-fpm 15969 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15970 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15971 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15972 0.0 0.2 123396 4580 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15973 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15974 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15975 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15976 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15977 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15978 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15979 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15980 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15981 0.0 0.2 123396 4584 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15982 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15983 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15984 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15985 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15986 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15987 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
php-fpm 15988 0.0 0.2 123396 4588 ? S 21:26 0:00 php-fpm: pool test
root 15990 0.0 0.0 112660 968 pts/1 R+ 21:27 0:00 grep --color=auto php
[root@aliyun ~]#

php-fpm慢执行日志
在php编写的网站中,我建议大家用LAMP架构,因为如果网站访问速度太慢可以找到具体的问题,这里有个非常重要的配置就是php-fpm慢执行日志。

1、还以test主机为例,编辑test.conf配置文件
[root@aliyun ~]# vim /usr/local/ php-fpm/etc /php-fpm.d/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
插入慢执行配置
request_slowlog_timeout = 2 记录执行时间大于2秒(阀值)的命令
slowlog = /data/logs/test-slow.log 慢执行日志记录存放位置

2、重载php-fpm服务
[root@aliyun ~]# service php-fpm reload
Reload service php-fpm done

3、查看慢查询日志是否生成
[root@aliyun ~]# ls /data/logs/
test.com.log nginx_error.log test-slow.log

4、创建慢执行测试脚本:
[root@aliyun ~]# vim /data/wwwroot/test.com/sleep.php 创建测试脚本
写入测试脚本内容

<?php
echo “test slow log”;
sleep(3);
echo “done”;
?>

保存退出

5、测试访问慢执行脚本
[root@aliyun etc]# curl -x127.0.0.1:80 test.com/sleep.php 测试发现没有任何输出,有错误

6、排错:
[root@aliyun ~]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 500 Internal Server Error
Server: nginx/1.14.0
Date: Fri, 15 Jun 2018 09:50:26 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.36

[root@aliyun ~]# vim /usr/local/php-fpm/etc/php.ini 打开php的配置文件,不是php-fpm服务的配置
搜索这display_errors并改为:
display_errors = On
这个显示错误的功能只在排错时开启,不然会有安全隐患,因为用户访问时有关php的任何错误都会直接显示再浏览器里,处理影响用户体验外,更重要的是会把网站的配置信息暴露出来。
保存退出

[root@aliyun ~]# service php-fpm reload 重载后再次访问慢查询脚本sleep.php
Reload service php-fpm done
[root@aliyun ~]# curl -x127.0.0.1:80 test.com/sleep.php
<br />
<b> Parse error </b>: syntax error , unexpected 'slow' (T_STRING), expecting ',' or ';' in <b>/data/wwwroot/test.com/sleep.php</b> on line <b> 2 </b><br />
发现脚本第2行有语法错误,

[root@aliyun ~]# vim /data/wwwroot/test.com/sleep.php 重新编辑脚本,将全角符号改为半角符号
[root@aliyun ~]# service php-fpm reload
Reload service php-fpm done
7、再次测试访问慢执行脚本
[root@aliyun ~]# curl -x127.0.0.1:80 test.com/sleep.php
test slow logdone 执行成功,再输入命令后有停顿2秒!

8、查看慢查询日志:
[root@aliyun ~]# cat /data/logs/test-slow.log

[15-Jun-2018 18:08:49] [pool test] pid 17735
script_filename = /data/wwwroot/test.com/sleep.php 此文件执行时超过了慢执行阀值
[0x00007fc568afe280] sleep() /data/wwwroot/test.com/sleep.php: 3 其中第3行执行超过慢执行阀值
[root@aliyun ~]#

9、关闭display_errors,并配置错误日志路径
[root@aliyun ~]# vim /usr/local/php-fpm/etc/php.ini
搜索display_errors,并改为:
display_errors = Off
搜索log_errors,并改为:
log_errors = On
搜索;error_log, 并在 ; error_log = syslog下方插入:
error_log = /usr/local/php-fpm/var/log/php-error.log
搜索error_reporting,并将错误日志级别改为:
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
创建错误日志文件,并改权限
[root@aliyun ~]# touch /usr/local/php-fpm/var/log/php-error.log
[root@aliyun ~]# chmod 666 /usr/local/php-fpm/var/log/php-error.log

open_basedir
和LAMP架构一样,LNMP架构也可以定义open_basedir功能,如果服务器上只运行一个站点,无论LAMP还是LNMP架构,可以在php的配置文件/usr/local/php/etc/php.ini 或/usr/local/php-fpm/etc/php.ini 里配置。如果服务器上运行多个站点,LAMP架构里是在apache的配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf里设置,LNMP架构里则是在 /usr/local/php-fpm/etc/php-fpm.conf里针对每个主机分别配置,或在/usr/local/php-fpm/etc/php-fpm.d/下针对每个主机单独的配置文件里进行配置。
1、编辑test主机的配置文件
[root@aliyun ~]# vim /usr/local/php-fpm/etc/php-fpm.d/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

request_slowlog_timeout = 2
slowlog = /data/logs/test-slow.log
php_admin_value[open_basedir]= /data/wwwroot/test.com : /tmp/
插入open_basedir的配置,限定此虚拟机只能在test.com目录和tmp目录里活动,从而隔离每个站点。
保存退出
2、测试:
[root@aliyun ~]# vim /usr/local/php-fpm/etc/php-fpm.d/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

request_slowlog_timeout = 2
slowlog = /data/logs/test-slow.log
php_admin_value[open_basedir]= /data/wwwroot /wwwtest.com : /tmp/
[root@aliyun ~]# service php-fpm reload 重载加载配置
Reload service php-fpm done
测试访问:
[root@aliyun ~]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.14.0
Date: Fri, 15 Jun 2018 16:48:56 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.36

[root@aliyun ~]# cat /usr/local/php-fpm/var/log/php-error.log 查看错误日志
[15-Jun-2018 16:48:56 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/ wwwtest .com:/tmp/ ) in Unknown on line 0
[15-Jun-2018 16:48:56 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
[root@aliyun ~]#
将错误日志删除:
[root@aliyun ~]# rm /usr/local/php-fpm/var/log/php-error.log
rm: remove regular file ‘/usr/local/php-fpm/var/log/php-error.log’? y
[root@aliyun ~]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 403 Forbidden 错误代码变成了403
Server: nginx/1.14.0
Date: Fri, 15 Jun 2018 16:55:10 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.36

再将正确的站点路径改回去

php-fpm进程管理
查看站点的php-fpm配置文件
[root@aliyun ~]# cat /usr/local/php-fpm/etc/php-fpm.d/test.conf
[test]
listen = /tmp/test.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic 进程管理方式,动态dynamic,也可以静态static
pm.max_children = 50 最大子进程数50,在满载时ps aux可以查看到50个子进程
pm.start_servers = 20 启动服务时默认启动的进程数
pm.min_spare_servers = 5
定义空闲时段,子进程最少值,如果达到这个数值时,php-fpm服务会自动派生新的子进程。
pm.max_spare_servers = 35
定义空闲时段,子进程最大值,如果高于这个数值就开始清理空闲的子进程。
pm.max_requests = 500
定义一个子进程最多处理的请求数量,当达到这个数值时,会自动退出。
rlimit_files = 1024

request_slowlog_timeout = 2
slowlog = /data/logs/test-slow.log

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



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值