`

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模式php内存泄漏探究1

    Nginx通过fork出多个子进程(worker)来处理用户请求,而PHP-FPM同样会创建子进程来处理PHP脚本。当Nginx的worker接收到请求时,会将请求传递到一个socket,PHP-FPM的空闲子进程监听到socket中的请求,然后进行处理...

    nginx+php-fpm优化技巧总结

    - 创建额外的sock文件,并在Nginx配置中通过`upstream`模块将请求负载均衡到多个sock文件对应的php-fpm实例上。这种方式可以有效分散负载,提高系统的整体吞吐量。 #### 三、php-fpm参数调优 php-fpm的性能调优...

    Nginx+PHP-FPM+APC=绝妙的组合.pdf

    Nginx采用了事件驱动模型,对I/O密集型任务有很好的性能表现,相比Apache的多进程模型,Nginx在处理大量并发连接时能更有效地利用系统资源。 PHP-FPM(PHP FastCGI Process Manager)是PHP的一个补丁,它将FastCGI...

    php-fpm.rpm包

    2. **池管理**:支持多进程池,每个池可以独立配置,适用于处理不同类型的请求,例如,可以为不同的域名或应用设置不同的进程池。 3. **性能优化**:通过平滑启动、慢启动等策略,减少服务器负载的突增,提高响应...

    PHP-FPM进程监控器.zip_PHP-FPM进程监控器

    PHP-FPM采用多进程模型,分为父进程和子进程两部分。父进程主要负责接收来自Web服务器的请求,并根据需要创建或复用子进程来处理这些请求。子进程执行完PHP脚本后会返回结果给父进程,再由父进程转发给Web服务器。...

    php-fpm.tar.gz

    相比于传统的CGI,FastCGI提供了更高效的处理方式,因为它能在单个进程中多次处理请求,从而减少每次请求创建新进程带来的开销。而PHP-FPM则是PHP与FastCGI交互的进程管理器,它负责启动、管理和调整PHP解释器的工作...

    php-fpm.conf配置文件中文翻译注释

    PHP-FPM是PHP的一个扩展,它提供了更高效、更灵活的PHP进程管理方式,使得Nginx等Web服务器可以通过FastCGI接口与PHP交互。以下是对`php-fpm.conf`配置文件中主要选项的中文翻译和注释: 1. **[global]**:全局设置...

    解决Linux下php-fpm进程过多导致内存耗尽问题

    在Linux系统中,php-fpm(FastCGI Process Manager)是PHP的一个重要组件,它用于管理PHP进程池,处理来自Web服务器(如Nginx)的请求。当php-fpm进程过多时,可能会导致内存耗尽,从而影响到其他服务,如数据库服务...

    ubuntu10.04配置 nginx+php-fpm模式的详解

    Nginx还使用了epoll的I/O模型来提供高效的并发处理能力,可以在events块中配置worker_connections以设置工作进程的并发连接数,以及multi_accept参数来启用接受尽可能多的连接。 在http块中,包含了对请求处理的...

    mod_php和mod_fastcgi和php-fpm的介绍,对比,和性能数据

    - **mod_fastcgi**:相比mod_php有更好的并发处理能力,但由于多进程间的通信开销较大,整体性能可能略低。 - **php-fpm**:具有较好的扩展性和灵活性,特别是在高并发场景下表现出色,可以动态调整进程数量以适应...

    php-fpm-zabbix.tar.gz

    2. **优势**:相比传统的mod_php(Apache模块),PHP-FPM提供更好的资源管理,支持多进程和池的概念,可以更好地控制PHP的内存使用和并发处理能力。 3. **配置**:PHP-FPM的配置文件通常位于`/etc/php/fpm/pool.d/`...

    php-fpm中文文档.pdf

    13. PHP-FPM中的fastcgi_finish_request()函数允许工作进程完成响应发送后继续执行脚本中的其他代码,不会阻塞后续请求的处理。 14. 通过PHP-FPM,可以设置REQUEST_BODY_FILE等fastcgi_param,来处理通过POST方法...

    基于PHP-FPM进程池探秘

    然而,与许多其他编程语言不同,PHP并不原生支持多线程,而是通过多进程的方式实现并发处理。在PHP的世界里,PHP-FPM(FastCGI Process Manager)扮演了关键角色,它为PHP-CGI提供了高效的进程管理,有效地控制了...

    nginx+php-fpm配置文件的组织结构介绍

    Pool配置文件定义了PHP-FPM的工作进程池,包括每个池的进程数量、权限设置等。这些文件可以自定义位置,但通常建议进行集中管理。在实际应用中,可能为每个Virtual Host创建一个独立的Pool配置文件,存放在例如`/var...

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

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

    windows下 php环境部署 nginx+php-nts+fcgi

    4. **配置Nginx与PHP-FPM通信**:在`nginx.conf`中,添加一个location块,设置对.php文件的处理规则,通过fastcgi_pass指定PHP-FPM监听的端口。 5. **启动服务**:使用`RunHiddenConsole.exe`来启动Nginx和PHP-FPM...

    php-fpm 占用CPU过高,100%的解决方法

    3. **检查配置**:根据文章提到的信息,作者之前参照了《Nginx使用的php-fpm的两种进程管理方式及优化》一文对php-fpm的进程进行了配置。这表明问题可能是由于配置不当导致的。可以通过检查`/usr/local/...

    php-fpm中max_children的配置

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

Global site tag (gtag.js) - Google Analytics