11-13-周四_16-50-42
This commit is contained in:
@@ -235,14 +235,6 @@ LoadModule access_compat_module modules/mod_access_compat.so
|
||||
|
||||
```
|
||||
|
||||
## 2.7 案例分析1
|
||||
|
||||
修改默认网址目录为:`/data/www/html`
|
||||
|
||||
## 2.8 案例分析2
|
||||
|
||||
修改 ServerName 为:`test.mysite.com`;修改 Listen 为:`8090`
|
||||
|
||||
|
||||
# 3. 持久连接
|
||||
|
||||
@@ -256,6 +248,9 @@ Persistent Connection:连接建立,每个资源获取完成后不会断开
|
||||
开启/关闭 Keepalive 进行测试验证
|
||||
|
||||
- 观察客户端TCP连接是否复用?
|
||||
- **开启 KeepAlive**:多个请求共享同一个 TCP 连接。
|
||||
- **关闭 KeepAlive**:每个请求都要重新建立和关闭 TCP 连接。
|
||||
|
||||
- [扩展] 使用压测工具进行测试观察响应延时?
|
||||
|
||||
```shell
|
||||
@@ -273,6 +268,14 @@ TIME-WAIT 0 0 [::ffff:127.0.0.1]:80 [::ffff:127.0.0.1]:33330
|
||||
|
||||
```
|
||||
|
||||
- 使用ab进行压力测试,在虚拟机环境中效果不明显
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# ab -c 1000 -n 10000 http://127.0.0.1/
|
||||
# -c 即concurrency,用于指定的并发数
|
||||
# -n 即requests,用于指定压力测试总共的执行次数
|
||||
```
|
||||
|
||||
# 4. 虚拟主机
|
||||
|
||||
Httpd 支持在一台物理主机上实现多个网站,即多虚拟主机
|
||||
@@ -1307,27 +1310,164 @@ httpd 支持三种 MPM 工作模式:prefork, worker, event
|
||||
LoadModule mpm_event_module modules/mod_mpm_event.so
|
||||
```
|
||||
|
||||
## 13.1 prefork 模式
|
||||
## 13.1 prefork模式
|
||||
|
||||
Prefork MPM,这种模式采用的是预派生子进程方式,用单独的子进程来处理请求,子进程间互相独立,互不影响,大大的提高了稳定性,但每个进程都会占用内存,所以消耗系统资源过高。
|
||||

|
||||
|
||||

|
||||
默认的工作模式是Prefork MPM,这种模式采用的是预派生子进程方式,用单独的子进程来处理请求,子进程间互相独立,互不影响,大大的提高了稳定性,但每个进程都会占用内存,所以消耗系统资源过高。
|
||||
|
||||
## 13.2 worker 模式
|
||||
Prefork MPM 工作原理:控制进程Master首先会生成“StartServers”个进程,“StartServers”可以在Apache主配置文件里配置,然后为了满足“MinSpareServers”设置的最小空闲进程个数,会建立一个空闲进程,等待一秒钟,继续创建两个空闲进程,再等待一秒钟,继续创建四个空闲进程,以此类推,会不断的递归增长创建进程,最大同时创建32个空闲进程,直到满足“MinSpareServers”设置的空闲进程个数为止。Apache的预派生模式不必在请求到来的时候创建进程,这样会减小系统开销以增加性能,不过Prefork MPM是基于多进程的模式工作的,每个进程都会占用内存,这样资源消耗也较高。
|
||||
|
||||
Worker MPM 是Apche 2.0 版本中全新的支持多进程多线程混合模型的 MPM,由于使用线程来处理 HTTP 请求,所以效率非常高,而对系统的开销也相对较低,Worker MPM 也是基于多进程的,但是每个进程会生成多个线程,由线程来处理请求,这样可以保证多线程可以获得进程的稳定性。
|
||||
* 将apache切换到prefork的模式下,可以通过`httpd -V`来查看
|
||||
|
||||

|
||||
```shell
|
||||
[root@localhost ~]# httpd -V
|
||||
Server version: Apache/2.4.6 (CentOS)
|
||||
Server built: Nov 16 2020 16:18:20
|
||||
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
|
||||
threaded: no
|
||||
forked: yes (variable process count)
|
||||
```
|
||||
|
||||
## 13.3 event 模式
|
||||
* 通过调整配置文件,可以修改prefork的参数
|
||||
|
||||
这个是 Apache 中最新的模式,在现在版本里的已经是稳定可用的模式。它和 worker 模式很像,最大的区别在于,它解决了 keepalive 场景下 ,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,挂在那里等待,中间几乎没有请求过来,一直等到超时)。
|
||||
```shell
|
||||
[root@localhost ~]# vim /etc/httpd/conf.d/mpm.conf
|
||||
StartServers 5 #开始访问进程
|
||||
MinSpareServers 5 #最小空闲进程
|
||||
MaxSpareServers 10 #无人访问时,留下空闲的进程
|
||||
ServerLimit 256 #最多进程数,最大值 20000
|
||||
MaxRequestWorkers 256 #最大的并发连接数,默认256
|
||||
MaxConnectionsPerChild 4000
|
||||
#子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)
|
||||
MaxRequestsPerChild 4000
|
||||
#从 httpd.2.3.9开始被MaxConnectionsPerChild代替
|
||||
[root@localhost ~]# systemctl restart httpd
|
||||
```
|
||||
|
||||
event MPM 中,会有一个专门的线程来管理这些 keepalive 类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理多个请求,实现了异步非阻塞。
|
||||
* 查看进程数
|
||||
|
||||
event MPM 在遇到某些不兼容的模块时会失效,将会回退到 worker 模式,一个工作线程处理一个请求。官方自带的模块,全部是支持event MPM的。
|
||||
```shell
|
||||
[root@localhost ~]# pstree -p 7606
|
||||
httpd(7606)─┬─httpd(7607)
|
||||
├─httpd(7608)
|
||||
├─httpd(7609)
|
||||
├─httpd(7610)
|
||||
└─httpd(7611)
|
||||
```
|
||||
|
||||

|
||||
* 修改prefork参数
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# vim /etc/httpd/conf.d/mpm.conf
|
||||
StartServers 10
|
||||
MaxSpareServers 15
|
||||
MinSpareServers 10
|
||||
MaxRequestWorkers 256
|
||||
MaxRequestsPerChild 4000
|
||||
[root@localhost ~]# systemctl restart httpd
|
||||
```
|
||||
|
||||
* 查看是否生效
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# pstree -p 7628
|
||||
httpd(7628)─┬─httpd(7629)
|
||||
├─httpd(7630)
|
||||
├─httpd(7631)
|
||||
├─httpd(7632)
|
||||
├─httpd(7633)
|
||||
├─httpd(7634)
|
||||
├─httpd(7635)
|
||||
├─httpd(7636)
|
||||
├─httpd(7637)
|
||||
└─httpd(7638)
|
||||
```
|
||||
|
||||
* 使用ab进行压力测试
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# ab -c 1000 -n 1000000 http://127.0.0.1/
|
||||
# -c 即concurrency,用于指定的并发数
|
||||
# -n 即requests,用于指定压力测试总共的执行次数
|
||||
```
|
||||
|
||||
* 测试过程中,可以看到最大进程数
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# ps aux |grep httpd |wc -l
|
||||
258
|
||||
```
|
||||
|
||||
* 结束ab的压力测试,等待一段时间,可以看到进程数慢慢减少
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# ps aux |grep httpd |wc -l
|
||||
12
|
||||
```
|
||||
|
||||
## 13.2 worker模式
|
||||
|
||||

|
||||
|
||||
Worker MPM是Apche 2.0版本中全新的支持多进程多线程混合模型的MPM,由于使用线程来处理HTTP请求,所以效率非常高,而对系统的开销也相对较低,Worker MPM也是基于多进程的,但是每个进程会生成多个线程,由线程来处理请求,这样可以保证多线程可以获得进程的稳定性;
|
||||
|
||||
Worker MPM工作原理: 控制进程Master在最初会建立“StartServers”个进程,然后每个进程会创建“ThreadPerChild”个线程,多线程共享该进程内的资源,同时每个线程独立的处理HTTP请求,为了不在请求到来的时候创建线程,Worker MPM也可以设置最大最小空闲线程,Worker MPM模式下同时处理的请求=ThreadPerChild*进程数,也就是MaxClients,如果服务负载较高,当前进程数不满足需求,Master控制进程会fork新的进程,最大进程数不能超过ServerLimit数,如果需要,可以调整这些对应的参数,比如,如果要调整StartServers的数量,则也要调整 ServerLimit的值
|
||||
|
||||
* 修改mpm文件为官方提供的默认数值,然后切换模式到worker模式
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# vim /etc/httpd/conf.d/mpm.conf
|
||||
ServerLimit 16
|
||||
StartServers 2
|
||||
MaxRequestWorkers 150
|
||||
MinSpareThreads 25
|
||||
MaxSpareThreads 75
|
||||
ThreadsPerChild 25
|
||||
[root@localhost ~]# cat /etc/httpd/conf.modules.d/00-mpm.conf |grep mpm
|
||||
#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@localhost ~]# systemctl restart httpd
|
||||
[root@localhost ~]# httpd -V
|
||||
Server version: Apache/2.4.6 (CentOS)
|
||||
Server built: Nov 16 2020 16:18:20
|
||||
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: worker
|
||||
threaded: yes (fixed thread count)
|
||||
forked: yes (variable process count)
|
||||
```
|
||||
|
||||
* 查看压力测试前后的进程数,查看线程数
|
||||
|
||||
```shell
|
||||
[root@localhost ~]# ps aux |grep httpd |wc -l
|
||||
5
|
||||
[root@localhost ~]# pstree -p 8615 | wc -l
|
||||
53
|
||||
[root@localhost ~]# ab -c 1000 -n 1000000 http://127.0.0.1/
|
||||
[root@localhost ~]# ps aux |grep httpd |wc -l
|
||||
9
|
||||
[root@localhost ~]# pstree -p 8393 | wc -l
|
||||
157
|
||||
```
|
||||
|
||||
## 13.3 event模式
|
||||
|
||||

|
||||
|
||||
这个是 Apache中最新的模式,在现在版本里的已经是稳定可用的模式。它和 worker模式很像,最大的区别在于,它解决了 keep-alive 场景下 ,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,挂在那里等待,中间几乎没有请求过来,一直等到超时)。
|
||||
|
||||
event MPM中,会有一个专门的线程来管理这些 keep-alive 类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理几个请求了,实现了异步非阻塞。
|
||||
|
||||
event MPM在遇到某些不兼容的模块时,会失效,将会回退到worker模式,一个工作线程处理一个请求。官方自带的模块,全部是支持event MPM的。
|
||||
|
||||
# 14. LAMP架构
|
||||
|
||||
|
||||
BIN
02.企业服务/04.Apache/1SeoH3T4vBKGbIn6.png!thumbnail
Normal file
BIN
02.企业服务/04.Apache/1SeoH3T4vBKGbIn6.png!thumbnail
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 78 KiB |
BIN
02.企业服务/04.Apache/gDX7shgp3adFozBR.png!thumbnail
Normal file
BIN
02.企业服务/04.Apache/gDX7shgp3adFozBR.png!thumbnail
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
BIN
02.企业服务/04.Apache/ufMfjKXkNnF9j3YI.png!thumbnail
Normal file
BIN
02.企业服务/04.Apache/ufMfjKXkNnF9j3YI.png!thumbnail
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 134 KiB |
Reference in New Issue
Block a user