php-fpm配置多进程池运行

php-fpm的pool

php可以针对不同的网站分配不同的进程池,这些进程池在工作过程中互不干扰,如果一个进程池被资源耗尽,不会被影响到其他进程池的正常运行。pool的进程池也可以像nginx虚拟主机那样分别配置单独的配置文件,各个配置文件中的配置互不干扰,同时作用于不同的网站php解析
在php配置文件里配置多个进程池,只需要把配置复制一份拷贝到原文件的内容中即可,这两个php池名称不一致,启动时会以不同名称来启动进程,在配置文件中也以不同模块名来区分,重新加载php查看其新的进程池名称

[root@aaa php-fpm]# 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
[http]
listen = /tmp/aaa.com-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[www].
listen = /tmp/b.com-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[root@aaa ~]# /usr/local/php-fpm/sbin/php-fpm -t
[15-Aug-2018 22:31:16] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

查看php进程,我这里使用php原本的启动文件有问题,使用reload没有正常加载我的配置,之后结果直接把php进程全部给killall掉了,生产环境十分不建议这么做,因为会导致一部分数据丢失,启动后使用ps -aux差看php的进程

[root@aaa ~]# ps -aux |grep php
root 13250 0.0 0.4 227600 4872 ? Ss 22:30 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 13251 0.0 0.4 227540 4656 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13252 0.0 0.4 227540 4656 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13253 0.0 0.4 227540 4660 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13254 0.0 0.4 227540 4660 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13255 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13256 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13257 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13258 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13259 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13260 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool http
php-fpm 13261 0.0 0.4 227540 4660 ? S 22:30 0:00 php-fpm: pool www
php-fpm 13262 0.0 0.4 227540 4660 ? S 22:30 0:00 php-fpm: pool www
php-fpm 13263 0.0 0.4 227540 4660 ? S 22:30 0:00 php-fpm: pool www
php-fpm 13264 0.0 0.4 227540 4660 ? S 22:30 0:00 php-fpm: pool www
php-fpm 13265 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool www
php-fpm 13266 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool www
php-fpm 13267 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool www
php-fpm 13268 0.0 0.4 227540 4664 ? S 22:30 0:00 php-fpm: pool www
php-fpm 13269 0.0 0.4 227540 4668 ? S 22:30 0:00 php-fpm: pool www
php-fpm 13270 0.0 0.4 227540 4668 ? S 22:30 0:00 php-fpm: pool www
root 13283 0.0 0.0 112724 976 pts/0 R+ 22:32 0:00 grep --color=auto php

把php进程池分别写入多个文件中进行配置,这个需要在主配置文件中加入include这行配置,然后再include指定的目录下编辑子配置文件

[root@aaa php-fpm]# 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 = /usr/local/php-fpm/etc/php-fpm/*.conf

在/usr/local/php-fpm/etc/php-fpm/这个目录下创建子配置文件,为了方便区分,使用网站域名相关字符来命名配置文件。/usr/local/php-fpm/etc/php-fpm/的php-fpm这个目录默认不存在,需要我们手动创建,然后在其下面写入子配置文件,配置文件中如果全部使用sock通信方式的话,需要将不同主机的php指定为不同名称的sock文件,这样做是为了方便区分
进入 /usr/local/php-fpm/etc/php-fpm/目录。写入不同主机的php配置文件模块

[root@aaa ~]# mkdir  /usr/local/php-fpm/etc/php-fpm/
[root@aaa ~]# vim /usr/local/php-fpm/etc/php-fpm/
[root@aaa php-fpm]# ls
aaa.conf b.conf
[root@aaa php-fpm]# cat aaa.conf 
[http]
listen = /tmp/aaa.com-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[root@aaa php-fpm]# vim b.conf 
[www]
listen = /tmp/b.com-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 10 
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

检查配置文件的内容,确认无误后重新加载配置

[root@aaa ~]# /usr/local/php-fpm/sbin/php-fpm -t
[15-Aug-2018 22:31:16] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@aaa php-fpm]# /etc/init.d/php-fpm reload
Reload service php-fpm  done

配置完php-fpm后,还要将nginx主机中的配置文件改为对应的sock文件,这样nginx才能找到正确的php sock文件,才能够正常提供服务

[root@aaa nginx]# vim /usr/local/nginx/conf/vhost/aaa.conf
location ~ \.php$         -----添加配置时注意网站根目录和sock文件目录
     {
     include fastcgi_params;
     fastcgi_pass unix:/tmp/aaa.com-fcgi.sock;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME /data/wwwroot/aaa$fastcgi_script_name;
     }
[root@aaa nginx]# vim /usr/local/nginx/conf/vhost/aaa.conf
location ~ \.php$           -----添加配置时注意网站根目录和sock文件目录
     {
     include fastcgi_params;
     fastcgi_pass unix:/tmp/b.com-fcgi.sock;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME /data/wwwroot/b$fastcgi_script_name;       
     }

php-fpm慢执行日志
php配置文件中提供php慢执行的日志记录,默认是不记录慢日志的。默认日志都是存在/usr/local/php-fpm/var/log/这个路径下的,配置单独的主机日志文件的话,会在该目录下以自定义名称来创建和记录日志的,参考的配置如下
以aaa.com这个的主机配置为例,配置以单独的文件创建,具体参考上一节内容

[root@aaa php-fpm]# cat aaa.conf 
[http]
listen = /tmp/aaa.com-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
request_slowlog_timeout = 2                                         判定执行多长时间为慢执行的语句,单位秒
slowlog = /usr/local/php-fpm/var/log/aaa-slow.log          添加慢日志的保存路径
[root@aaa php-fpm]# /usr/local/php-fpm/sbin/php-fpm -t  
```     
检查配置是否正确
创建测试的循环语句来测试慢日志的记录信息

[root@aaa b]# vim sleep.php
<?php
ehco "test slow log";
sleep(2);
echo "done";
?>
[root@aaa b]# curl -x127.0.0.1:80 b.com/sleep.php


open_bashdir
open_bashdir是限制网站目录不可做越目录访问,如果多个虚拟主机的网站,其中一个网站被×××黑入,其他的网站不一定会被×××知道
跟Apache中的admin_value open_bashdir 配置是相同的意思,假如一个虚拟主机的目录被非法访问,那么此配置可以限制该访问被限制在此目录下不能跳跃到其他目录,需要在httpd虚拟主机配置文件中定义不同的目录,tmp是一个临时保存的目录,如果限制了tmp目录,那么网站上传图片时连临时文件都无法写入,这样的话会无法存储图片等文件的
在php的独立配置文件里加入open_bashdir的配置,指定网站网页的根路径进行限制,php_admin_value中定义网站文件存放的路径,这里以b.com进行测试

[root@aaa php-fpm]# vim b.conf
[www]
listen = /tmp/b.com-fcgi.sock
php_admin_value[open_bashdir]=/data/wwwroo/b/:/tmp/

编辑php.ini文件记录日志,reporting定义日志记录级别,error_log让php把错误日志记录在文件里

error_reporting = E_ALL
error_log = /usr/log/php-fpm/var/log/php_errors.log

测试错误的访问,改动php_admin_value[open_bashdir]的网站根路径
将路径修改为错误的bbbb路径,然后访问并查看日志内容

[root@aaa php-fpm]# vim b.conf
php_admin_value[open_bashdir]=/data/wwwroo/bbbb/:/tmp/
~  


php-fpm进程管理
php-fpm配置中的参数,dynamic的动态模式,动态分配php的运行进程,在dynamic下配置进程的默认启动数或最低/最高的数量,
下面是php配置文件中的参数,内容简述有配置详解

[www]
listen = /tmp/b.com-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
request_slowlog_timeout = 2
slowlog = /usr/local/php-fpm/var/log/aaa-slow.log
request_slowlog_timeout = 2
slowlog = /usr/local/php-fpm/var/log/b-slow.log
php_admin_value[open_bashdir]=/data/wwwroot/wwbb:/tmp/


pm = dynamic =   dynamic动态经常管理,设置为static后,配置文件中的这个pool里只会有pm.max_children会生效
pm.max_children =  50 设置最大子进程数,php处理请求时子进程最大只可以达到这个数量,不会超过这个数,使用ps 加wc统计查看进程数量
pm.start_servers =  10 服务启动时立即打开的子进程数量,也就是php在启动时默认打开的进程数量
pm.min_spare_servers = 5 在空闲时段,子进程最少数量,如果要到达这个值,php-fpm则会产生新的子进程
pm.max_spare_servers = 35 在空闲时段,子进程数的最大值,如果大于这个值,则会开始清理掉空闲的子进程
pm.max_requests = 500 定义一个子进程处理请求的最大数,如果php-fpm的某个子进程在处理指定的500个请求后,该子进程不会再处理数据请求并会自动退出
rlimit_files = 1024   master进程最大打开的文件数量

转载于:https://blog.51cto.com/8844414/2161558

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,您想问有关使用Docker运行PHP-FPM的问题,是吗?那我来简单介绍一下。 使用Docker运行PHP-FPM的主要目的是为了方便地进行开发和部署,同时还可以保证应用程序在不同环境中的一致性。下面是一些基本步骤: 1. 首先,您需要安装Docker,可以在官网上下载安装包。 2. 然后,您需要创建一个dockerfile文件,用于构建您的PHP-FPM镜像。示例文件内容如下: ``` FROM php:7.4-fpm-alpine RUN apk --update --no-cache add \ git \ unzip \ libzip-dev \ libpng-dev \ libjpeg-turbo-dev \ freetype-dev \ && docker-php-ext-install zip pdo_mysql mysqli gd \ && apk del --purge autoconf g++ make \ && rm -rf /var/cache/apk/* WORKDIR /var/www/html CMD ["php-fpm"] ``` 3. 接着,您可以使用以下命令构建您的镜像: ``` docker build -t your-image-name . ``` 4. 然后,您可以使用以下命令运行您的PHP-FPM容器: ``` docker run -d --name your-container-name -p 9000:9000 -v /path/to/your/app:/var/www/html your-image-name ``` 其中: - -d:表示在后台运行容器 - --name:指定容器的名称 - -p:将容器的9000端口映射到主机的9000端口 - -v:将主机上的应用程序目录挂载到容器中的/var/www/html目录中 5. 最后,您可以使用以下命令进入容器并查看PHP-FPM的日志: ``` docker exec -it your-container-name /bin/sh tail -f /usr/local/var/log/php-fpm.log ``` 希望这些信息能帮助到您。如果您还有其他问题,请随时问我。 ### 回答2: Docker是一种开源的容器化平台,可以在不同的操作系统中创建和管理轻量级的容器。php-fpmPHP FastCGI Process Manager)是PHP中用于处理FastCGI的进程管理器。结合使用Docker和php-fpm可以带来一些好处。 首先,使用Docker和php-fpm可以使PHP应用程序更易于部署和管理。通过在Docker容器中运行php-fpm,可以将应用程序及其所有的依赖项打包到一个容器中,而不需要在不同的环境中进行配置和安装。这使得在不同的服务器上部署应用程序变得更加简单和一致。 其次,使用Docker和php-fpm可以提供更好的资源管理。通过使用php-fpm进程管理器,可以控制和监视PHP进程的数量和资源使用情况。这有助于避免服务器过载和资源浪费,并确保应用程序的性能和稳定性。 此外,使用Docker和php-fpm可以提高开发和测试的效率。在开发环境中,可以使用Docker容器来模拟生产环境,确保应用程序在不同的环境中具有一致的行为。还可以利用Docker容器的快速启动和停止功能,加速开发、测试和部署流程。 最后,使用Docker和php-fpm还可以实现应用程序的可伸缩性。通过通过启动多个具有相同配置php-fpm容器来处理更多的请求,可以轻松地扩大应用程序的处理能力。这使得应对高流量和负载峰值变得更加容易。 综上所述,通过结合使用Docker和php-fpm,可以简化应用程序的部署和管理、提高资源利用率、加速开发和测试速度,并实现应用程序的可伸缩性。 ### 回答3: Docker是一个开源的应用容器引擎,可以将应用程序与其依赖项打包在一个轻量级的、可移植的容器中。而php-fpmPHP FastCGI Process Manager的简称,是一种常用的PHP处理器,它能够管理和处理PHP请求。 在使用Docker时,可以通过Docker镜像来运行php-fpm容器,以便于更方便、更快速地搭建和部署PHP应用程序。首先,我们可以根据需要选择适合的php-fpm镜像,并使用Docker命令来创建和启动容器。 在创建容器时,我们可以指定容器运行的端口号、挂载主机目录、设定环境变量等。例如,我们可以将容器的端口号映射到主机的某个端口上,这样就可以通过主机的IP地址和对应端口号来访问容器内运行PHP应用程序。 另外,我们还可以通过容器之间的网络连接来实现不同容器间的通信。例如,我们可以创建一个Nginx容器来作为反向代理服务器,同时将其与php-fpm容器连接在一起,这样就可以实现客户端与PHP服务器之间的通信。 由于Docker的轻量级特性,可以在一台物理机或虚拟机上运行多个容器,每个容器可以独立运行,互不干扰。这样的模式可以有效地隔离应用程序及其依赖项,减少部署和升级的风险。 总而言之,通过使用Docker来运行php-fpm容器,可以更方便、更快速地部署和管理PHP应用程序,提高开发和运维效率。同时,Docker的轻量级特性和容器间的网络连接,也提供了更灵活和可扩展的部署方案,使整个应用环境更加稳定和可靠。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值