httpd性能调整及服务器安全

本文详细介绍了Apache的多路处理模块(MPM)的三种模式:prefork、worker和event。prefork模式采用非线程、预派生的工作方式,适合稳定性需求但内存消耗大;worker模式结合多进程和多线程,适用于轻量级需求但需考虑线程安全;event模式通过事件驱动优化了worker模式在keep-alive场景下的资源浪费,提升了高并发处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MPM:多路处理模块

分为三种模式:

1,prefork

Prefork MPM实现了一个非线程、预派生的工作模式。它在Apache启动之初,就会预派生一些子进程,然后等待连接。可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程。它成熟稳定,可以兼容新老模块,也不需要担心线程安全问题。但是一个进程相对地占用更多的资源,消耗大量内存,不擅长处理高并发的场景。

进程模型,每个进程处理一个请求,模式:父进程—>多个子进程—>一个子进程处理一个请求


2,worker

与Prefork工作模式相比,worker使用了多进程和多线程的混合模式,worker模式也同样会预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比进程更加轻量级,因为线程通常会共享父进程的内存地址的,因此内存占用会减少一些。

同时如果一个线程异常挂了,会导致父进程和它的其他正常子线程都挂了,这样也只会影响Apache的一部分,而不是整个服务。

缺点使必须考虑线程安全性,因为多个子进程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,某个线程会被一直占据,也许中间没有任何请求,需要等到超时才会被释放。如果过多的线程被这样占据,也会导致在高并发下的无服务线程可用。


线程模型,每个进程衍生出多个线程,每个线程处理一个请求,模式:父进程—>多个子进程—>每个子进程衍生多个线程—>一个线程处理一个请求任务


3,event

和worker工作模式很像,最大的区别是解决了在keep-alive场景下,长期被占用的线程的资源浪费问题,在event MPM中,会有一个专门的线程来管理这些keep-alive线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放,这样增强了在高并发场景下的请求处理能力。

事件驱动模型,一个进程处理多个任务,模式:父进程—>多个子进程—>一个子进程处理多个请求



httpd-2.2 MPM设置
修改文件 vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
HTTPD=/usr/sbin/httpd.event
默认为prefork模式
配置后重启httpd server生效


centos7 httpd-2.4 MPM设置
修改文件vim  /etc/httpd/conf.modules.d/00-mpm.conf
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值