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通过fork出多个子进程(worker)来处理用户请求,而PHP-FPM同样会创建子进程来处理PHP脚本。当Nginx的worker接收到请求时,会将请求传递到一个socket,PHP-FPM的空闲子进程监听到socket中的请求,然后进行处理...
- 创建额外的sock文件,并在Nginx配置中通过`upstream`模块将请求负载均衡到多个sock文件对应的php-fpm实例上。这种方式可以有效分散负载,提高系统的整体吞吐量。 #### 三、php-fpm参数调优 php-fpm的性能调优...
Nginx采用了事件驱动模型,对I/O密集型任务有很好的性能表现,相比Apache的多进程模型,Nginx在处理大量并发连接时能更有效地利用系统资源。 PHP-FPM(PHP FastCGI Process Manager)是PHP的一个补丁,它将FastCGI...
2. **池管理**:支持多进程池,每个池可以独立配置,适用于处理不同类型的请求,例如,可以为不同的域名或应用设置不同的进程池。 3. **性能优化**:通过平滑启动、慢启动等策略,减少服务器负载的突增,提高响应...
PHP-FPM采用多进程模型,分为父进程和子进程两部分。父进程主要负责接收来自Web服务器的请求,并根据需要创建或复用子进程来处理这些请求。子进程执行完PHP脚本后会返回结果给父进程,再由父进程转发给Web服务器。...
相比于传统的CGI,FastCGI提供了更高效的处理方式,因为它能在单个进程中多次处理请求,从而减少每次请求创建新进程带来的开销。而PHP-FPM则是PHP与FastCGI交互的进程管理器,它负责启动、管理和调整PHP解释器的工作...
PHP-FPM是PHP的一个扩展,它提供了更高效、更灵活的PHP进程管理方式,使得Nginx等Web服务器可以通过FastCGI接口与PHP交互。以下是对`php-fpm.conf`配置文件中主要选项的中文翻译和注释: 1. **[global]**:全局设置...
在Linux系统中,php-fpm(FastCGI Process Manager)是PHP的一个重要组件,它用于管理PHP进程池,处理来自Web服务器(如Nginx)的请求。当php-fpm进程过多时,可能会导致内存耗尽,从而影响到其他服务,如数据库服务...
Nginx还使用了epoll的I/O模型来提供高效的并发处理能力,可以在events块中配置worker_connections以设置工作进程的并发连接数,以及multi_accept参数来启用接受尽可能多的连接。 在http块中,包含了对请求处理的...
- **mod_fastcgi**:相比mod_php有更好的并发处理能力,但由于多进程间的通信开销较大,整体性能可能略低。 - **php-fpm**:具有较好的扩展性和灵活性,特别是在高并发场景下表现出色,可以动态调整进程数量以适应...
2. **优势**:相比传统的mod_php(Apache模块),PHP-FPM提供更好的资源管理,支持多进程和池的概念,可以更好地控制PHP的内存使用和并发处理能力。 3. **配置**:PHP-FPM的配置文件通常位于`/etc/php/fpm/pool.d/`...
13. PHP-FPM中的fastcgi_finish_request()函数允许工作进程完成响应发送后继续执行脚本中的其他代码,不会阻塞后续请求的处理。 14. 通过PHP-FPM,可以设置REQUEST_BODY_FILE等fastcgi_param,来处理通过POST方法...
然而,与许多其他编程语言不同,PHP并不原生支持多线程,而是通过多进程的方式实现并发处理。在PHP的世界里,PHP-FPM(FastCGI Process Manager)扮演了关键角色,它为PHP-CGI提供了高效的进程管理,有效地控制了...
Pool配置文件定义了PHP-FPM的工作进程池,包括每个池的进程数量、权限设置等。这些文件可以自定义位置,但通常建议进行集中管理。在实际应用中,可能为每个Virtual Host创建一个独立的Pool配置文件,存放在例如`/var...
PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式。与Apache类似,它的进程数也是可以根据设置分为动态和静态的。 php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本。...
4. **配置Nginx与PHP-FPM通信**:在`nginx.conf`中,添加一个location块,设置对.php文件的处理规则,通过fastcgi_pass指定PHP-FPM监听的端口。 5. **启动服务**:使用`RunHiddenConsole.exe`来启动Nginx和PHP-FPM...
3. **检查配置**:根据文章提到的信息,作者之前参照了《Nginx使用的php-fpm的两种进程管理方式及优化》一文对php-fpm的进程进行了配置。这表明问题可能是由于配置不当导致的。可以通过检查`/usr/local/...
现在nginx + fpm 基本成为主流的配置,其中我们比较关注的是pm.max_chindren的配置 首先,我们关注一个设置: pm = static/dynamic, 这个选项是标识fpm子进程的产生模式: static :表示在fpm运行时直接fork出pm....