PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器,
php-fpm 非常多,可能原因是网站不会自动释放资源导致的
Nginx:
严格来说不是Nginx在跑PHP,Nginx只做转发给php-fpm,是php-fpm在维持PHP跑…
php-fpm现在稳定性算可以了,但还是无法释放内存,所以一般的配置是500次后子进程不接收任务,本身任务完成自己结束掉,另开个新的继续跑,这个任务就是php-fpm在管理…
windows下php 进程:windows下nginx是以cgi方式运行,必须先启动cgi,进程数默认是根据系统核心数*PHP版本个数,可以自行去nginx安装目录下的ini文件进行修改
PHP-CGI
linux php 进程
php-fpm
IIS:
IIS和Apache就是作为模块跑,释放内存什么的自动的,但IIS那货跑PHP这种东西还是不太靠谱,这是相对Nginx和Apache来说,所以别考虑IIS了…
windows php 进程
php-cgi.exe
Apache:
Apache性能挺好,以前一直用。但现在Nginx的发展很快,促进了php-fpm的发展也很完善稳定了,php-fpm是大家都力捧的东西,不用考虑作为模块跑的兼容之类(很多PHP扩展偶尔会出问题),未来是主流PHP的运行方式,占用内存也小。Apache的太庞大,不解决一些痛点导致Nginx的崛起。比如我关心的Apache下的限速只有cband还比较好用,但是第三方做的,虽然也不错,但经常这个版本不支持,那个版本支持。而Nginx此类功能已经作为基本功能自带了,而且非常强大…
windows php 进程
CGI / FastCGI
linux php 进程
php-fpm
确定当前的apache是什么MPM模式(winnt模式,perfork模式,worker模式)
进入到apache/bin目录
cmd命令:httpd.exe -l
说明:看mpm_xxx.c 如果xxx是winnt 说明是winnt,另外还可能是perfork或者worker
在Windows和Unix/linux操作系统上,MPM模块主要有mpm_winnt
、mpm_prefork
、mpm_worker
三种。
mpm_prefork模块
mpm_prefork
模块主要应用于Unix/Linux平台的Apache服务器,其主要工作方式是:当Apache服务器启动后,mpm_prefork
模块会预先创建多个子进程(默认为5个),当接收到客户端的请求后,mpm_prefork
模块再将请求转交给子进程处理,并且每个子进程同时只能用于处理单个请求。如果当前的请求数将超过预先创建的子进程数时,mpm_prefork
模块就会创建新的子进程来处理额外的请求。Apache总是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。这样客户端的请求就不需要在接收后等候子进程的产生。
由于在mpm_prefork
模块中,每个请求对应一个子进程,因此其占用的系统资源相对其他两种模块而言较多。不过mpm_prefork
模块的优点在于它的每个子进程都会独立处理对应的单个请求,这样,如果其中一个请求出现问题就不会影响到其他请求。同时,mpm_prefork
模块可以应用于不具备线程安全的第三方模块(比如PHP的非线程安全版本),且在不支持线程调试的平台上易于调试。此外,mpm_prefork
模块还具有比mpm_worker
模块更高的稳定性。
mpm_worker模块
mpm_worker
模块也主要应用于Unix/Linux平台的Apache服务器,它可以看作是mpm_prefork
模块的改进版。mpm_worker
模块的工作方式与mpm_prefork
模块类似。不过,由于处理相同请求的情况下,基于进程(例如mpm_prefork
)比基于线程的处理方式占用的系统资源要多。因此,与mpm_prefork
模块不同的是,mpm_worker
模块会让每个子进程创建固定数量的服务线程和一个监听线程,并让每个服务线程来处理客户端的请求,监听线程用于监听接入请求并将其传递给服务线程处理和应答。Apache总是试图维持一个备用或是空闲的服务线程池。这样,客户端无须等待新线程或新进程的建立即可得到处理。
与mpm_prefork
模块相比,mpm_worker
模块可以进一步减少系统资源的开销。再加上它也使用了多进程,每个进程又有多个线程,因此它与完全基于线程的处理方式相比,又增加了一定的稳定性。
mpm_winnt模块
mpm_winnt
模块是专门针对Windows操作系统而优化设计的MPM模块。它只创建一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。
修改MPM模块配置
在对Apache的MPM模块具备一定了解后,我们就可以针对不同的MPM模块来修改Apache的最大并发连接数配置了。
启用MPM模块配置文件
在Apace安装目录/conf/extra
目录中有一个名为httpd-mpm.conf
的配置文件。该文件主要用于进行MPM模块的相关配置。不过,在默认情况下,Apache的MPM模块配置文件并没有启用。因此,我们需要在httpd.conf
文件中启用该配置文件,如下所示:
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf (去掉该行前面的注释符号"#")