因为Apache的模式中会有一些进程线程的知识,所以如果想要搞懂Apache的模式的不同一定要明白进程与线程之间是怎样的一种关系
一、线程与进程的概念
- 线程是操作系统分配资源的基本单位,进程是程序的实体,程序软件是静止的,而进程是将程序运行起来,进程是活动的。
- 线程是进程中的一个实体,是被系统调度和派分的基本单位,线程自己不拥有操作系统资源,但是进程会拥有操作系统资源,那么所在同一处进程的线程会共享该进程的系统资源。
多进程与多线程的概念
- 多进程:每个进程相互独立,不会影响应用程序的主程序,会极大的提高性能,但是耗费资源较多
- 多线程:无需跨进程,一个线程如果崩溃那么会影响整个进程的稳定性和性能
线程与进程的区别
线程是进程的基本单位,一个进程包含一个线程或多个线程,进程下的线程会共享该线程的资源,而线程不会拥有系统资源,当一个进程崩溃那么进程下的线程全部崩溃,如果一个线程崩溃那么会连带其他线程或者是整个进程崩溃,多线程的好处是提高访问效率但是也会损失一定的稳定性,并发高的网站一般采用多线程进行处理,但是需要稳定性的话一般会采用多进程来处理。
二、模块介绍
最新版本的apache 2.4版本现共有三个模块模式,第一个也是apache默认的模式,prefork模式,第二个worker模式,第三个是event模式,这三个模式也是apache一路成长的路标性的模块。
httpd -M:查看所有模块
查看出的结果shared表示是动态挂载到httpd上的
static表示的是该模块是内核或者httpd必须的模块
1、Prefork
控制进程Master在最初创建“startservers”后,根据预派生模式,会创建出多个进程,在每一个进程工作在待定的时间内只能处理一个请求,好处就是方便请求到来时不用生成临时请求,会提升服务器的web性能,多进程模式,缺点是比较耗费内存和系统资源。prefork模式也是apache的默认模式。
配置方式
[root@localhost usr] vim /etc/httpd/conf/httpd.conf
<Ifmodule prefork.c>
startservers 8 #开启httpd时的进程
minspareservers 5 #最小的空闲进程
maxspareservers 20 #最大的空闲进程
serverlimit 256 #每个进程的线程数
maxclients 256 #每个进程的最大线程数
MaxRequestsperchild 4000 #每个线程处理的最大上限
</Ifmodule>
[root@localhost usr] httpd -t
Syntax OK
#测试配置文件是否有错误
[root@localhost usr] systemctl restart httpd
2.Worker
使用多线程多进程的混合模型的MPM,由于是基于线程来处理,所以可以处理海量的http请求,相比较于prefork需要的资源也较少,适合大并发高流量的web服务器应用环境,但是缺点就是当一个线程崩溃后整个进程或者应用程序有可能会一起挂掉,稳定性较低。
配置方式
[root@localhost usr] vim /etc/httpd/conf.modules.d/00-mpm.conf
#进入mpm配置文件,将worker的模块#删除即开启模块
[root@localhost usr] httpd -M | grep "worker"
mpm_worker_module (shared)
#模块已经挂载
<IfModule worker.c> #Worker MPM引擎配置段;
StartServers 8 #默认启动Apache工作进程数;
MaxClients 4000 #每秒支持的最大客户端并发;
MinSpareThreads 25 #最小空闲线程数;
MaxSpareThreads 75 #最大空闲线程数;
ThreadLimit #每个子进程可能配置的线程上限
ThreadsPerChild 75 #每个进程启动的线程数;
MaxRequestsPerChild 0 #每个进程能处理的最大请求数,0表示无限制;
</IfModule>
3.event
事件驱动模型,多进程模型,每个进程可以相应多个请求。是apache最新的模式它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放,这样增强了高并发场景下的请求处理能力,现在已经支持SSL。
keep-alive
长连接,tcp建立后每个资源获取完成后不会断开连接,而是会继续等待其他资源的进行。断开方式主要有数量限制和时间限制,优点是在较短的时间内传输多个文件不需要连接多次,一次即可传输完成。缺点是在有并发量的较大的web服务器上长连接机制可能会导致某些用户访问无法响应。
keep-alive配置:
keepAlive off | on #关闭或者开启
keepAlive Timeout 10 #超时时间
MaxKeepAliveRequests 100 #最大请求数
#可以使用telnet请求主页页面来测试
配置方式
#与worker很像这里就不多做阐述了
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>