#yyds干货盘点#Apache的三种模式和安装

1.Apache的三种模式

1.1.Apache prefork模型:

apache的默认的模型
预派 生模式,有 一个主控制进程,然后 生成多个 子进程,使 用select模型,最 大并发1024,每个 子进程有 一个独 立的线程响应 用户请求,相对 比较占 用内存,但是 比较稳定,可以设置最 大和最 小进程数,是最古 老 的 一种模式,也是最稳定的模式,适 用于访问量 不 是很 大的场景。
优点:稳定
缺点: 大量  用户访问慢,占 用资源,1024个进程不 适 用于 高并发场景

1linux是什么操作系统.2.Apache woapache是干嘛用的ker模型:

一种多进程和多线程混合的模型,有 一个控制进程,启动多个 子进程,每个 子进程 里  面包含固定的线程,使 用线程程来处理 请求,当线程不 够使 用的时候会再启动 一个新的 子进程,然后在进程 里  面再启动线程处理 请求,由于其使 用了 线程处理 请求,因此可以承受更  高的并发。
优点:相 比prefork 占 用的内存较少,可以同时处理 更多的请求
缺点:使用keepalive的长连接方式(会话保持状态),某个线程会 一直被占据,即使没有传输数据,也需要 一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在 高并发场景下的 无服务线程可 用。(该问题在prefork模式下,同样会发 生)

1.3. Apache event模型:

比worker多了一个监听进程
Apache中最新的模式,2012年 发布的apache 2.4.X系列 正式 支持event 模型,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本 里 的已经是稳定可 用的模式。它和worker模式很像,最 大的区别在于,它解决了 keepalive场景下, 长期被占 用的线程的资源浪费问题(某些线程因为被keepalive,空挂在哪 里 等待,中间 几乎没有请求过来,甚 至等到超时)。event MPM中,会有 一个专 门的线程来管理 这些keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执  完毕后, 又允许它释放。这样增强了  高并发场景下的请求处理 能 力 。
优点:单线程响应多请求,占据更 少的内存, 高并发下表现更 优秀,会有 一个专 门的线程来管理 keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执  完毕后, 又允许它释放
缺点:没有线程安全控制

2.1 CentOS7的Apache的安装

#安装
[root@localhost ~]# rpm -q httpd
httpd-2.4.6-97.el7.centos.2.x86_64
[root@localhost ~]# ps -ef |grep httpd
root       2578      1  0 14:54 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2579   2578  0 14:54 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2580   2578  0 14:54 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2581   2578  0 14:54 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2582   2578  0 14:54 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2583   2578  0 14:54 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root       2601   2490  0 14:55 pts/0    00:00:00 grep --color=auto httpd
[root@localhost ~]# cat /proc/2579/status
Name:   httpd
State:  S (sleeping)
Tgid:   2579
Ngid:   0
Pid:    2579
PPid:   2578
TracerPid:  0
Uid:    48  48  48  48
Gid:    48  48  48  48
FDSize: 64
Groups: 48
VmPeak:   224160 kB
VmSize:   224084 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:      2928 kB
VmRSS:      2928 kB
VmData:     1212 kB
VmStk:       136 kB
VmExe:       488 kB
VmLib:      8556 kB
VmPTE:       448 kB
VmSwap:        0 kB
Threads:    1    #表示单进程,所以centos安装的Apache是Profork模型
SigQ:   0/3829
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000001001002
SigCgt: 00000001880046e9
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
Seccomp:    0
Cpus_allowed:   ffffffff,ffffffff,ffffffff,ffffffff
Cpus_allowed_list:  0-127
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:  0
voluntary_ctxt_switches:    1
nonvoluntary_ctxt_switches: 0
[root@localhost ~]# httpd -V
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 10 2021 14:26:31
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork  #显示profork模型
threaded:     no
forked:     yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

2.2 Ubuntu 安装的httpd

[root02:50 PMubuntu ~]#apt  update
[root03:04 PMubuntu ~]#apt install apache2 -y
[root03:05 PMubuntu ~]#systemctl start apache
[root03:07 PMubuntu ~]#apachectl -V
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2021-09-28T22:27:27
Server's Module Magic Number: 20120211:68
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     event    #event 模型
threaded:     yes (fixed thread count)
forked:     yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
[root03:07 PMubuntu ~]#ps -ef |grep apache2
root       1256      1  0 14:49 ?        00:00:00 /usr/sbin/apache2 -k start
www-data   1257   1256  0 14:49 ?        00:00:00 /usr/sbin/apache2 -k start
www-data   1258   1256  0 14:49 ?        00:00:00 /usr/sbin/apache2 -k start
root       3116   2567  0 15:07 pts/0    00:00:00 grep --color=auto apache2
[root03:09 PMubuntu ~]#cat /proc/1257/status
Name:   apache2
Umask:  0022
State:  S (sleeping)
Tgid:   1257
Ngid:   0
Pid:    1257
PPid:   1256
TracerPid:  0
Uid:    33  33  33  33
Gid:    33  33  33  33
FDSize: 64
Groups: 33
NStgid: 1257
NSpid:  1257
NSpgid: 1256
NSsid:  1256
VmPeak:  1285032 kB
VmSize:  1285008 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:      4600 kB
VmRSS:      4400 kB
RssAnon:        1564 kB
RssFile:        2772 kB
RssShmem:         64 kB
VmData:   224684 kB
VmStk:       132 kB
VmExe:       632 kB
VmLib:      4300 kB
VmPTE:       372 kB
VmSwap:        0 kB
HugetlbPages:          0 kB
CoreDumping:    0
Threads:    27  #一个子进程下面有多个子线程
SigQ:   0/3591
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: fffffffe3ffba207
SigIgn: 0000000001001000
SigCgt: 00000001880046eb
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
NoNewPrivs: 0
Seccomp:    0
Speculation_Store_Bypass:   thread vulnerable
Cpus_allowed:   ffffffff,ffffffff,ffffffff,ffffffff
Cpus_allowed_list:  0-127
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:  0
voluntary_ctxt_switches:    1
nonvoluntary_ctxt_switches: 1