11-13-周四_16-50-42

This commit is contained in:
AaronXu
2025-11-13 16:50:42 +08:00
parent c3336b458f
commit 20675c5222
4 changed files with 159 additions and 19 deletions

View File

@@ -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 支持在一台物理主机上实现多个网站,即多虚拟主机
@@ -1309,25 +1312,162 @@ LoadModule mpm_event_module modules/mod_mpm_event.so
## 13.1 prefork模式
Prefork MPM这种模式采用的是预派生子进程方式用单独的子进程来处理请求子进程间互相独立互不影响大大的提高了稳定性但每个进程都会占用内存所以消耗系统资源过高。
![img](04.Apache/ufMfjKXkNnF9j3YI.png!thumbnail)
![img](04.Apache/prefork模式.png)
默认的工作模式是Prefork MPM这种模式采用的是预派生子进程方式用单独的子进程来处理请求子进程间互相独立互不影响大大的提高了稳定性但每个进程都会占用内存所以消耗系统资源过高。
Prefork MPM 工作原理控制进程Master首先会生成“StartServers”个进程“StartServers”可以在Apache主配置文件里配置然后为了满足“MinSpareServers”设置的最小空闲进程个数会建立一个空闲进程等待一秒钟继续创建两个空闲进程再等待一秒钟继续创建四个空闲进程以此类推会不断的递归增长创建进程最大同时创建32个空闲进程直到满足“MinSpareServers”设置的空闲进程个数为止。Apache的预派生模式不必在请求到来的时候创建进程这样会减小系统开销以增加性能不过Prefork 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)
```
* 通过调整配置文件可以修改prefork的参数
```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
```
* 查看进程数
```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 也是基于多进程的,但是每个进程会生成多个线程,由线程来处理请求,这样可以保证多线程可以获得进程的稳定性。
![img](04.Apache/gDX7shgp3adFozBR.png!thumbnail)
![img](04.Apache/worker工作模式.png)
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 模式很像,最大的区别在于,它解决了 keepalive 场景下 长期被占用的线程的资源浪费问题某些线程因为被keep-alive挂在那里等待中间几乎没有请求过来一直等到超时
![img](04.Apache/1SeoH3T4vBKGbIn6.png!thumbnail)
event MPM 中,会有一个专门的线程来管理这些 keepalive 类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理多个请求,实现了异步非阻塞
这个是 Apache中最新的模式在现在版本里的已经是稳定可用的模式。它和 worker模式很像最大的区别在于它解决了 keep-alive 场景下 ,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,挂在那里等待,中间几乎没有请求过来,一直等到超时)
event MPM 在遇到某些不兼容的模块时会失效,将会回退到 worker 模式,一个工作线程处理个请求。官方自带的模块全部是支持event MPM的
event MPM中,会有一个专门的线程来管理这些 keep-alive 类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理个请求了,实现了异步非阻塞
![img](04.Apache/event工作模式.png)
event MPM在遇到某些不兼容的模块时会失效将会回退到worker模式一个工作线程处理一个请求。官方自带的模块全部是支持event MPM的。
# 14. LAMP架构

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB