APACHE MPM Multi process module

本文详细分析了Apache2中两种核心的Multi-Processing Module (MPM)机制:prefork和worker模式。prefork模式采用无线程、预分叉方式处理请求,适用于需要避免线程的兼容性问题;worker模式则为混合多进程多线程服务器,通过使用线程来服务请求,减少系统资源消耗,同时保持多进程稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Question: 分析apache2 MPM机制

First:

1. prefork

没有线程

This Multi-Processing Module (MPM) implements a non-threaded, pre-forking web server that handles requests in a manner similar to Apache 1.3. It is appropriate for sites that need to avoid threading for compatibility with non-thread-safe libraries. It is also the best MPM for isolating each request, so that a problem with a single request will not affect any other.

How it work?

A single control process is responsible for launching child processes which listen for connections and serve them when they arrive. Apache always tries to maintain several spare or idle server processes, which stand ready to serve incoming requests. In this way, clients do not need to wait for a new child processes to be forked before their requests can be served.

父进程 具有ROOT权限去管理权限小的子进程。

父进程在没有REQUEST到来之前就生成几个子进程。

http://httpd.apache.org/docs/2.2/mod/prefork.html

不需要在多个线程间穿梭,省了资源

2. worker

This Multi-Processing Module (MPM) implements a hybrid multi-process multi-threaded server. By using threads to serve requests, it is able to serve a large number of requests with fewer system resources than a process-based server. However, it retains much of the stability of a process-based server by keeping multiple processes available, each with many threads.

http://httpd.apache.org/docs/2.2/mod/worker.html

一个进程多个线程

一个进程可以处理更多的REQUEST, 在大并发量时候有优势

### Apache MPM(多处理模块)概述 Apache HTTP 服务器提供了多种多处理模块 (MPM),这些模块决定了如何管理子进程和线程以响应客户端请求。每种 MPM 模式都有其特点,适用于不同场景下的性能优化需求[^1]。 #### 主要的 MPM 类型及其特征 - **Prefork MPM** 这是最简单的模型之一,它为每个连接创建一个新的独立进程。这种模式适合那些不完全支持线程安全的应用程序环境。然而,因为每次都需要启动新的进程来服务新到来的HTTP请求,所以在高并发情况下效率较低,并且会占用较多内存资源[^3]。 - **Worker MPM** 使用该模式时,一个父进程会产生多个子进程;每个子进程中又包含了固定数量的工作线程以及一个监听线程。这种方式能够更高效地利用CPU核心数并减少上下文切换带来的开销,从而提高吞吐量。对于大多数现代操作系统而言,这是推荐的选择,尤其是在运行PHP脚本或其他CGI应用的时候[^4]。 - **Event MPM** Event 是 worker 的改进版,在保持相似架构的基础上增加了事件驱动机制,允许单个工作线程同时处理更多的非阻塞IO操作。这使得 event 成为了应对大量短生命周期连接的理想方案,比如服务于WebSocket协议或是频繁发起的小规模AJAX调用等情形下表现出色。 #### 如何查看当前使用的 MPM 可以通过命令行工具 `httpd -V` 或者查阅 `/etc/httpd/conf/httpd.conf` 文件中的设置项确认正在使用的具体 MPM 版本。如果是通过包管理器安装的服务端软件,则可能已经预设好了默认值[^5]。 ```bash httpd -V | grep 'Server MPM' ``` #### 更改 MPM 设置的方法 当采用源码编译方式进行部署时,可以选择将特定类型的 MPM 编译为静态或共享对象形式加载至服务器内核中。一旦选择了静态链接的方式,后续想要更换就必须再次经历完整的重编译过程;相反若是作为动态库存在的话,则只需简单调整配置文件里的相应条目就能实现即时生效的目的。 ```bash ./configure --prefix=/usr/local/apache2 \ --enable-so \ --enable-deflate=shared \ --enable-expires=shared \ --enable-headers=shared \ --enable-mime-magic=shared \ --with-mpm=event # 此处指定了event MPM为例 make && make install ``` 或者是在已有的配置文件里找到类似下面这样的语句: ```apacheconf LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # LoadModule mpm_worker_module modules/mod_mpm_worker.so # LoadModule mpm_event_module modules/mod_mpm_event.so ``` 取消掉目标行前边的注释符号(`#`)之后保存更改再重启web server即可完成转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值