美文网首页APACHE
2.MPM三种工作模式

2.MPM三种工作模式

作者: Stone_説 | 来源:发表于2020-08-03 18:57 被阅读0次

目录
0.介绍
1.prefork
2.worker
3.event

0.介绍

prefork:多进程I/O模型,每个进程响应一个请求,默认模型
    一个主进程:生成和回收n个子进程,创建套接字,不响应请求  
    多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个
worker:复用的多进程I/O模型,多进程多线程, IIS使用此模型
    一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求: m*n
event:事件驱动模型( worker模型的变种)
    一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求: m*n,有专门的监控线程来管理这些keep-alive
    类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力

配置文件

[root@node03 ~]# rpm -ql httpd|less
/etc/httpd/conf.modules.d/00-mpm.conf

httpd-2.2: event 测试版, centos6默认
httpd-2.4: event 稳定版, centos7默认

1.Prefork MPM

prefork MPM.jpg
Prefork MPM: 预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,
            可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景

修改配置文件

[root@node03 conf.modules.d]# pwd
/etc/httpd/conf.modules.d
[root@node03 conf.modules.d]# ls
00-base.conf  00-dav.conf  00-lua.conf  00-mpm.conf  00-proxy.conf  00-systemd.conf  01-cgi.conf
[root@node03 conf.modules.d]# vim 00-mpm.conf 
  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
[root@node03 html]# pstree -p|grep httpd
           |-httpd(7880)-+-httpd(7881)
           |             |-httpd(7882)
           |             |-httpd(7883)
           |             |-httpd(7884)
           |             `-httpd(7885)
[root@node03 html]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       7880  0.0  0.5 230428  5200 ?        Ss   19:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     7881  0.0  0.3 230428  3020 ?        S    19:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     7882  0.0  0.3 230428  3020 ?        S    19:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     7883  0.0  0.3 230428  3020 ?        S    19:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     7884  0.0  0.3 230428  3020 ?        S    19:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     7885  0.0  0.3 230428  3020 ?        S    19:16   0:00 /usr/sbin/httpd -DFOREGROUND

优点:稳定
缺点:慢,占用资源,不适用于高并发场景

2.worker MPM

worker MPM.jpg
修改配置文件
[root@node03 conf.modules.d]# pwd
/etc/httpd/conf.modules.d
[root@node03 conf.modules.d]# ls
00-base.conf  00-dav.conf  00-lua.conf  00-mpm.conf  00-proxy.conf  00-systemd.conf  01-cgi.conf
[root@node03 conf.modules.d]# vim 00-mpm.conf 
  #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
[root@node03 conf.modules.d]# systemctl restart httpd
[root@node03 html]# pstree -p
systemd(1)─┬─NetworkManager(6069)─┬─{NetworkManager}(6085)
            ......
           ├─httpd(8018)─┬─httpd(8019)
           │             ├─httpd(8020)─┬─{httpd}(8024)
           │             │             ├─{httpd}(8025)
                                          ......
           │             │             └─{httpd}(8049)
           │             ├─httpd(8021)─┬─{httpd}(8052)
           │             │             ├─{httpd}(8053)
                                          ......
           │             │             └─{httpd}(8077)
           │             └─httpd(8022)─┬─{httpd}(8078)
           │                           ├─{httpd}(8079)
                                         ......
           │                           └─{httpd}(8103)
[root@node03 html]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       8018  0.1  0.5 230632  5400 ?        Ss   19:27   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8019  0.0  0.3 230380  2988 ?        S    19:27   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8020  0.0  0.5 517460  5540 ?        Sl   19:27   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8021  0.0  0.5 517460  5540 ?        Sl   19:27   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8022  0.0  0.5 517460  5544 ?        Sl   19:27   0:00 /usr/sbin/httpd -DFOREGROUND
worker MPM:是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,
            当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,
            因此可以承受更高的并发。

优点:相比prefork 占用的内存较少,可以同时处理更多的请求
缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输 数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也 会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会 发生)

3.event MPM

event MPM.jpg
修改配置文件
[root@node03 conf.modules.d]# pwd
/etc/httpd/conf.modules.d
[root@node03 conf.modules.d]# ls
00-base.conf  00-dav.conf  00-lua.conf  00-mpm.conf  00-proxy.conf  00-systemd.conf  01-cgi.conf
[root@node03 conf.modules.d]# vim 00-mpm.conf 
  #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
[root@node03 conf.modules.d]# systemctl restart httpd
[root@node03 html]# pstree -p
systemd(1)─┬─NetworkManager(6069)─┬─{NetworkManager}(6085)
            ......
           ├─httpd(8120)─┬─httpd(8121)
           │             ├─httpd(8122)─┬─{httpd}(8147)
           │             │             ├─{httpd}(8149)
                                          ......
           │             │             └─{httpd}(8179)
           │             ├─httpd(8123)─┬─{httpd}(8127)
           │             │             ├─{httpd}(8128)
                                          ......
           │             │             └─{httpd}(8157)
           │             └─httpd(8124)─┬─{httpd}(8180)
           │                           ├─{httpd}(8181)
                                         ......
           │                           └─{httpd}(8205)
[root@node03 html]# ps aux
root       8120  0.0  0.5 230644  5420 ?        Ss   19:33   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8121  0.0  0.3 230392  2996 ?        S    19:33   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8122  0.0  0.5 517472  5568 ?        Sl   19:33   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8123  0.0  0.5 517472  5568 ?        Sl   19:33   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8124  0.0  0.5 517472  5576 ?        Sl   19:33   0:00 /usr/sbin/httpd -DFOREGROUND
event MPM: Apache中最新的模式,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。它和worker模式很像,
            最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,
            中间几乎没有请求过来,甚至等到超时)。 eventMPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,
            将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力
event只在有数据发送的时候才开始建立连接,连接请求才会触发工作线程,即使用了TCP的一个选项,叫做延迟接受连接TCP_DEFER_ACCEPT,
加了这个选项后,若客户端只进行TCP连接,不发送请求,则不会触发Accept操作,也就不会触发工作线程去干活,进行了简单的防攻击( TCP连接)

优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放
缺点:没有线程安全控制

相关文章

  • 2.MPM三种工作模式

    目录0.介绍1.prefork2.worker3.event 0.介绍 配置文件 httpd-2.2: event...

  • Vi

    Vi有三种基本工作模式: + 命令模式 + 文本输入模式 + 末行模式。 ====================...

  • LVS的三种工作模式

    一、LVS的三种工作模式 LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用...

  • 广汽传祺GA3S PHEV动力电池温控系统原理

    高压电池温控系采用冷却液作为传热介质,它有三种工作模式:慢冷模式、快冷模式和加热模式。这三种工作模式可以根据环境温...

  • Vim 编辑器常用命令

    (一)Vim模式 vim的三种工作模式:命令模式(Command Mode) 、输入模式(Input Mode)、...

  • NSURLSessionConfiguration

    三种工作模式: 默认会话模式(default):工作模式类似于原来的NSURLConnection,使用的是基于磁...

  • NSURLSession的三种模式

    三种工作模式: 默认会话模式(default):工作模式类似于原来的NSURLConnection,使用的是基于磁...

  • 2019-02-25

    Vim的三种模式 normal(普通模式) insert(插入模式) command(命令模式) Vim的工作方式...

  • LVS的3种工作模式和8种调度算法

    LVS的三种工作模式: VS/NAT模式(Network address translation) VS/TUN模...

  • Linux学习心得09-vi 编辑命令

    vi有三种基本工作模式,分别是:命令模式(command mode)、插入模式(insert mode)和底行模式...

网友评论

    本文标题:2.MPM三种工作模式

    本文链接:https://www.haomeiwen.com/subject/vcturktx.html