--with-mpm=worker 编译时可以指定 默认是 perfork 模式
查看模式
- [root@localhost ~]# httpd -V | grep "Server MPM"
- Server MPM: Worker
prefork 模式 (默认):
主进程 |
---|
子进程 1 |
子进程 2 |
子进程 3 |
使用的是多个子进程, 而每个进程只有一个线程, 每个进程在某个确定的时间只能维持一个连接.
工作原理:
控制进程最初建立若干个子进程, 为了不在请求到来时再生成子进程, 所以要根据需求不断的创建新的子进程, 最大可以达到每秒 32 个知道满足需求为止.
安装方法:
在编译时, 指定参数 --with-mpm=prefork 不加也可以, 因为默认就是
优点:
效率高, 稳定, 安全, 对于线程调试困难的平台来说, 调试更容易些.
缺点: 和 worker 模式比消耗资源更多, 没有 worker 模式并发高.
- [root@localhost ~]# sed -rn '30,42p' /usr/local/httpd/conf/extra/httpd-mpm.conf
- # prefork MPM
- # StartServers: number of server processes to start
- # MinSpareServers: minimum number of server processes which are kept spare
- # MaxSpareServers: maximum number of server processes which are kept spare
- # MaxClients: maximum number of server processes allowed to start
- # MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 5 开机启动进程
MinSpareServers 5 最小空闲
MaxSpareServers 10 最大空闲
MaxClients 150 最大进程数
MaxRequestsPerChild 0 一个进程不限制接收请求数
</IfModule>
worker 模式
主进程 线程 1 线程 2
子进程 1 线程 1线程 2
子进程 2 线程 1线程 2
子进程 3 线程 1线程 2
是 Apache2.x 新引进来的模式, 是线程与进程的结合, 在 worker 模式下, 会有多个子进程, 每个子进程又会有多个进程, 每个线程在某个确定的时间只能维持一个连接.
工作原理:
由主控制进程生成若干个子进程, 而每个子进程中又包含固定的线程数, 各个线程独立处理请求, 同样为了不在请求到来时再生成线程, 在配置文件中设置了最小和最大的空闲线程数及所有子进程中的线程总数, 如果现有子进程中的线程总数不能满足并发及负载, 控制进程将派生新的子进程.
优点: 内存占用比 prefork 模式低, 适合高并发, 高流量 http 服务
缺点: 假如一个线程崩溃, 整个进程就会被连同其任何线程一起死掉, 由于线程共享内存空间, 所以一个程式在运行时必须被系统识别为每个线程是安全的. 服务稳定性不如 prefork 模式.
- [root@localhost ~]# sed -rn '44,58p' /usr/local/httpd/conf/extra/httpd-mpm.conf
- # worker MPM
- # StartServers: initial number of server processes to start
- # MaxClients: maximum number of simultaneous client connections
- # MinSpareThreads: minimum number of worker threads which are kept spare
- # MaxSpareThreads: maximum number of worker threads which are kept spare
- # ThreadsPerChild: constant number of worker threads in each server process
- # MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
StartServers 2 起始进程
MaxClients 150 最大进程
MinSpareThreads 25 最小空闲线程
MaxSpareThreads 75 最大空闲线程
ThreadsPerChild 25 每个子进程的线程数量
MaxRequestsPerChild 0 一个子进程的最大请求 0 表示不限
</IfModule>
觉得本文章不错的可以分享给您的朋友或订阅我, 后期会分享更多的 Linux 技术文章
来源: http://www.bubuko.com/infodetail-2697807.html