httpd的MPM模型以及ab压力测试工具

一.MPM模型

MPM  多处理模型(并不是某一种具体处理并发连接的名字,而是三类处理并发连接方式的统称。)

作用:接收处理并发连接时的处理方式,包括prefork,worker,event

(并发连接:服务器同一时间收到多个请求。)

1.prefork

预先生成子进程的方式,等待着客户端的请求,由每个子进程处理客户端请求,

阿帕奇有一个父进程,有一个子进程,

如上图所示,此时阿帕奇没有收到请求,但是阿帕奇软件也会预先生成多个子进程来等待这客户端的请求。

真正处理客户端请求是由子进程来处理的。

来一个请求,父进程生成一个子进程来处理这个请求。

优势:在于稳定,也就是说,一个子进程由于某些原因,导致不能去处理客户端请求,但是于此同时不会去阻碍其他的子进程去处理客户端的请求。

劣势:占资源,在计算机中每启动一个子进程,计算机系统就要给这个进程分配相应的内存,如果计算机中启动的进程数量过多的话,在低内存的机器下面会过量的占据机器内存。

如上图所示,可以在httpd软件的后面加上-V的选项,来查看这个软件的详细信息,此时就可以查看到这个软件处理并发连接的方式。

如上图所示,这就是标识的阿帕奇软件在使用prefork的MPM模型去处理并发连接。

将来可以根据需要对prefork的MPM模型进行优化的配置

如上图所示,就是对prefork进行的一些相关配置

2是启动阿帕奇软件的时候,默认启动的子进程数。

3是最小空闲的子进程,也就是说是最少的没有处理客户端请求的进程数。

5是服务器允许启动的最多进程数,这个是个系统全局的限制,即最大启动的进程数不能超过256个

6即服务器最多能同时处理多少个客户端的连接。

7表示每个子进程最多能够处理多少个请求,当这个子进程达到最多处理的请求数值的时候,这个子进程会被销毁掉,然后父进程会重新生成一个子进程,

当你不知道数值写多少合适,可以先按照官方网站中的默认数值进行填写,然后进行压力测试,再对数值进行调试。

如上图所示,针对prefork的配置可以写到配置文件00-proxy.conf中,然后使用httpd -t来检查是否有语法错误,

然后可以使用ps -elf | grep http中可以看到默认启动的子进程数量

2.worker

线程:Thread:

1.线程要由进程产生

2.同一个进程下的多个线程,可以共享进程的内存空间。

多进程多线程

预先 生成 子进程,由每个子进程生成多个线程,由每个线程处理客户端请求。

线程(thread) 是操作系统能够进行运算调度的最小单位。

线程都是由某一个进程产生,

某一个进程下的多个线程可以共享这个进程的内部空间。

机器中启动一个进程,就会给这个进程相应的内存,

如上所示,进程A启动之后,硬盘需要把文件内容存到内存中,然后这个进程A才能根据这个文件内容做相应的操作,

进程B同理

但是进程B如果相要处理与进程A相同的文件内容就需要把硬盘中的文件内容重新保存到另一块硬盘空间中,然后对这个文件内容进行操作。

进程与线程的区别?

线程与进程最大的区别是,同一个进程下的多个线程可以共享这个进程的内部空间(内存)。

首先机器中启动一个进程,就会给这个进程相应的内存空间。

线程处理数据的速度比进程要快。

劣势:1.如果这个子进程挂了,可能会影响许多客户端的访问,

2.这个worker与一些软件的兼容性不是很好,并且阿帕奇软件只能用来解析静态页面,如果网站是php写的,就需要相应的软件来辅助。

3.worker模型并发量非常大的情况下,可能会造成线程耗尽的问题,比如一个进程规划能产生100个线程,就是说这个网站只能接收100个来自客户端的请求,如果超出这个100请求数量,就会导致线程耗尽的问题,如果这个进程的线程被占用光了,这个进程就会被销毁掉。

优势:速度快

劣势:

1.稳定性较差

2.与其他的应用程序兼容性不好,

3.在长连接的场景下,容易造成线程耗尽的问题。

如上图所示,就是修改httpd服务的MMP模型为worker模块的操作。

如上图所示,显示worker模块以threaded线程的方式工作。

3.event

多进程多线程的工作模式

避免在长连接场景下线程耗尽的问题

在所有线程设定一个管理线程,由管理线程接收请求,转交给其他线程处理。

event相比于worker多做了一个看门狗的机制,

这个机制的作用是多个线程被耗尽,

按照以前的worker模块来说,子进程的所有线程都要去处理来自客户端的请求。

但是event模块来说,会有一个线程虽然接收来自客户端的请求,但是并不会去处理来自客户端的请求。而是会当有线程空闲的时候,把这个请求转交出去。

这三种方式要么用第一种要么用第三种,

如上图所示,将阿帕奇的MPM模型修改为event模块。

连接和请求的区别?

一个连接可以发送多个请求,

二.压力测试工具--ab(模拟大量客户端的访问请求,来观察服务器各参数的变化。)

我想知道我服务器最多能承受多少客户端的访问,

如上图所示,可以用yum provides "*bin/ab"

这样的命令来查看常用的命令工具来自于哪个软件,

从上图可知,这ab命令来自于httpd-tools软件

如上图所示,可以敲ab回车来查看ab命令的使用格式,ab +url地址就可以调整对谁做压力测试。

-n后面跟请求数,模拟网站服务器发送多少个请求,

-c表示的是并发连接数。

比如 ab -n 10000 -c 1000 这个命令的意思是总共向服务器发送10000个请求,每次发送1000个请求,后面跟上要测试的url地址。

如上图所示,一次模拟400次请求,然后是服务器处理完所有请求花费了多少时间。

优化之后,这个时间应该越来越少,

然后是总共完成的请求数,失败的请求数,错误的请求数,

然后是客户端与服务器之间传输了多少数据,(首部加尾部加实体数据)

然后是真实的数据传输了多少,(实体数据)

这个服务器每秒能处理多少请求,这个表示服务器的吞吐率,这个数值越大越好,

 

这个是按照10000个请求,每次发400个,每个请求花费多少时间。

目的:第一增加服务器的性能,

第二检测所做的优化配置是否生效。

压力测试,一般是从测试服务器上去做,而不从生产服务器上做。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值