`

nginx中php-fpm的多进程池

 
阅读更多

php-fpm多个进程池

说明:

每个池使用不同的配置,各个池之间互不干涉。默认情况下,PHP 只启用了一个池,所有请求均在这个池中执行。一旦某些请求出现拥堵之类的情况,那么很可能会连累整个池出现问题;如果启用多个池,那么可以把请求分门别类放到不同的池中执行,此时如果某些请求出现拥堵之类的情况,那么只会影响自己所在的池,从而控制故障的波及范围。

设置多个进程池,每个进程池分配不同的站点,可以做到一个站占用资源过多导致其它站也不能访问的尴尬情况。这使得网站可以更好的运行,如果某个站点受到少量CC攻击,也不至于拖跨所有的站点

 

第一步:php-fpm的配置:

在php-fpm.conf中默认只有[www]这一个pool(进程池),假设如果需要新增一个叫ajia的进程池,可以添加下面配置:(这里的配置可以自行增减,但是[ajia]的字眼是必须有的)

[ajia]    

user=nobody  ;可以使用别的用户、用户组

group=nobody

;listen=127.0.0.1:9001 ;可以使用tcp或者unix socket的方式,但是必须区别于其他池的配置,比如tcp的端口不能一样,socket的文件不能一样

listen = /dev/shm/php-fpm0.socket 

pm=dynamic  ;当pm=dynamic,pm.max_children不使用,但是值也一定要存在,当pm=static,只使用pm.max_children

pm.max_children=10

pm.start_servers=2 

pm.min_spare_servers=1 

pm.max_spare_servers=10 

pm.process_idle_timeout=15

 

第二步:nginx中配置:

在对应的fastcgi模块配置中的fastcgi_pass的值设置成新增的ajia的进程池

fastcgi_pass unix:/dev/shm/php-fpm0.socket;

或者

fastcgi_pass  127.0.0.1:9001;

 

最后:重启nginx和php-fpm之后生效,使用 ps -ef | grep php-fpm 可以查看到会出现2个不同的进程池的fpm进程

 

一般不会把fastcgi_pass定义到特定的某一个进程池中,而是定义到一个upstream上游服务器集合中,这个upstream已经将不同的php-fpm进程池包含了,设置如下:

在http配置块中添加upstream:

upstream fzjh{

  server unix:/dev/shm/php-fpm0.socket weight=1; #weight设置权重,这个是新增的ajia的进程池

  server 127.0.0.1:9000 weight=2; #这个是默认的www的进程池

}

 

fastcgi_pass的值修改为fzjh即可,这样每次的php-fpm处理连接时候会轮询不同的进程池,哪怕其中一个进程池挂掉了,也不会影响其他池的php进程

 

 

上面这种方式的进程池是基于php-fpm本身的效果,用一个php-fpm的master进程带动,另一种方式是起多个php-fpm的master进程,这个多个master进程对应的连接nginx方式不同(socket文件或者端口不同)

 

第一步:使用多个php-fpm配置文件,例如使用php-fpm1.conf、php-fpm2.conf

php-fpm1.conf中的listen配置为unix:/dev/shm/php-fpm1.socket,其他的配置看情况配置

php-fpm2.conf中的listen配置为unix:/dev/shm/php-fpm2.socket

第二步:启动2个php-fpm的master进程,通过-y带上php-fpm配置文件的形式:

/usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm1.conf

/usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm2.conf

 

重启nginx和php-fpm后,使用 ps -ef | grep php-fpm 可以查看到2个不同的master,这样就可以了

分享到:
评论

相关推荐

    Nginx使用的php-fpm的两种进程管理方式及优化

    PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式。与Apache类似,它的进程数也是可以根据设置分为动态和静态的。 php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本。...

    php-fpm中max_children的配置

    现在nginx + fpm 基本成为主流的配置,其中我们比较关注的是pm.max_chindren的配置 首先,我们关注一个设置: pm = static/dynamic, 这个选项是标识fpm子进程的产生模式: static :表示在fpm运行时直接fork出pm....

    nginx加php-fpm出现502 bad gateway错误的5种解决方法

    nginx出现502有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端php-fpm处理有问题,nginx将正确的客户端请求发给了后端的php-fpm进程,但是因为php-fpm进程的问题导致不能正确解析php代码,最终返回给...

    lua-nginx-openresty-redis 详细案例源码

    Nginx和PHP-FPM启动脚本 Nginx的11个Phases agentzh 的 Nginx 教程 Nginx 陷阱和常见错误 TCP和UDP负载平衡官方参考文档 Nginx 高并发系统内核优化 nginx 并发数问题思考:worker_connections,worker_...

    Nginx一个IP如何配置多个站点的方法教程

    前言 对于Nginx,一个IP上配置多个站点还是很常见的。...在centos上搭建php-fpm+nginx环境不是很难,网上有很多的帖子,按照上面讲解的,把需要安装的软件安装一下就行了。 目录一览 安装完毕后,配置文件通

    PHP连接Nginx服务器并解析Nginx日志的方法

    PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比...

    php-coroutine-engine:此项目适用于php-fpm支持协程

    传统php-fpm的设计模式主要是通过多进程来进行并发处理请求。对于服务器资源的使用不充分。 本项目就是通过对php-fpm源码进行改造,实现了协程模式的php-fpm,最终可以像nginx一样,几个进程即可处理大量的并发请

    ThinkWorker:在没有ApacheNginxphp-fpm的情况下运行! 一个基于WorkermanPHP框架,可帮助您构建网站!

    驻留内存和多进程:一次加载代码,并稳定运行,并快速地通过多个进程与PHP套接字连接。 基于Workerman 。 懒惰的自动加载:可以自动加载每个类,并且可以肯定的是,只有一次,它才会保留在内存中。 VHost支持:...

    PHP-FPM和Nginx的通信机制详解

    CGI 的机制是每处理一个请求需要 fork 一个 CGI 进程,请求结束再kill掉这个进程,在实际应用上比较浪费资源,于是就出现了CGI 的改良版本 FastCGI,FastCGI 在请求处理完后,不会 kill 掉进程,而是继续处理多个...

    workerman-chat-for-winPHP socket 服务器框架

    workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP... workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。

    CentOS7.0下安装PHP5.6.30服务的教程详解

    nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx。 PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的。 PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。所以已经不...

    workerman PHP socket 服务器框架

    workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP... workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。

    workerman-manual-zh:workerman中文手册

    实际上Workerman类似一个PHP版本的nginx,核心也是多进程+Epoll+非阻塞IO。Workerman每个进程能维持上万并发连接。由于本身常住内存,不依赖Apache、nginx、php-fpm这些容器,拥有超高的性能。同时支持TCP、UDP

    Docker-Webstack:一个基于Alpine构建的Webstack容器,运行Nginx,PHP和S6-overlay

    对我而言,没有,因为我发现所有现有容器要么运行某种bash脚本来启动Nginx和PHP,要么使用用户在后台启动一个或多个进程。 前者对我来说确实很骇人,而后者则不能用作init守护程序,因为并可能使您的容器最终陷入...

    PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析

    有时候,运行 Nginx、PHP-CGI(php-fpm) Web服务的 Linux 服务器,突然系统负载上升,使用 top 命令查看,很多 php-cgi 进程 CPU 使用率接近100%。

    一个PHP开发的的高性能Socket服务器框架.rar

    orkerman-chatorkerman是一款纯PHP开发的开源高性能的PHP socket...workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。

    docker-laravel:使用 Docker 和 Nginx 运行 Laravel 项目

    Docker-[]-Laravel 使用运行项目。概要此映像基于 ,配置为在后面运行项目作为 Web 服务器并使用 ,所有进程都由守护程序。...主管:`/etc/supervisord.d/nginx.iniPHP FPM: /etc/php-fpm.conf FPM 站点特定: /etc

    WempServer 1.1

    PHP 5.4.13(最新稳定版,支持PHP-FPM(独家首创Windows版本),实现PHP-CGI进程智能管理。) MySQL 5.5.30(最新稳定版) phpMyAdmin 3.5.4(最新稳定版) adminer 3.6.3(最新稳定版) sqlbuddy 1.3.3(最新稳定版...

    基于Workerman 改写的简化版 用于开发基于 Socket 的 HTTP Server.rar

    Workerman 本身是一个PHP多进程服务器框架,具有 PHP 进程管理以及 socket 通信的模块,所以不依赖 php-fpm、nginx 或者 apache 等这些容器便可以独立运行。 特性 workerman 诸多的不同寻常的特性,使得PHP开发者...

    WempServer-1.3简体中文版

    PHP 5.4.15(最新稳定版,支持PHP-FPM(独家首创Windows版本),实现PHP-CGI进程智能管理。) MySQL 5.6.11(最新稳定版) phpMyAdmin 3.5.4(稳定版) adminer 3.6.3(稳定版) sqlbuddy 1.3.3(稳定版) 另外,...

Global site tag (gtag.js) - Google Analytics