zoukankan      html  css  js  c++  java
  • Apache的工作模式

    Apache是目前世界排名第一的web服务器软件,跨平台和安全性高;支持SSL和多个虚拟主机;
    它是以进程为基础的结构,不适合多处理器环境,所以,web站点扩容通常是增加服务器而不是增加处理器。

    Apache有三种稳定的工作模式,称为多进程处理模块MPM

    1.Prefork工作模式

    apache在启动之初,就预先派生一些子进程,然后等待请求过来;每个子进程只有一个线程,在一个时间点内,只能处理一个请求。

    优点:成熟稳定,兼容所有模块,线程安全性高
    缺点:不适合处理高并发请求;一个进程相对占用更多的系统资源,消耗更多的内存

    2.Worker工作模式
    使用多进程和多线程的混合模式,也预先派生了几个子进程(数量远少于prefork派生的);每个子进程创建多个线程,包括一个监听线程;每个请求会被分配一个线程来服务

    优点:占据更少的内存(多个线程通常会共享父进程的内存),适合高并发的场景
    缺点:必须考虑线程安全的问题,使用keep-alive长连接的时候,某个线程会被一直占用,即使没有收到请求,需要等待到超时才会释放;一个线程出现问题也会导致同一进程下的线程出现问题

    keep-alive
    在http早期,每个http请求都要求打开一个tcp socket连接,并且使用之后就断开这个tcp连接;
    设置keepalive_timeout之后,httpd守护进程便会等待浏览器还有没有请求,这个等待就是keepalive_timeout时间;如果在规定的等待时间内没有收到浏览器发来的http请求,则关闭这个http连接;
    优点:减少tcp连接的建立次数;减少time_wait状态连接;提高性能和提高httpd服务器的吞吐率
    缺点:长时间的tcp连接容易导致系统资源无效占用;配置不当的keep-alive,比重复利用连接带来的损失大


    3.Event工作模式
    类似于worker的工作模式,最大区别是它解决了keep-alive场景下,长期被占用的线程的资源的浪费问题;event模式下,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实的请求过来的时候,将请求传递给服务线程,执行完毕又允许它释放

    优点:增强了高并发场景下的请求处理能力,减少tcp的连接数量
    缺点:Event PMP不能在https访问下工作

    查看apache工作模式的方法:
    httpd -V |grep -i "Server MPM"

    指定的方式:
    在编译时使用 --with-mpm=xxx

    作者:ccku
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
  • 相关阅读:
    Ubuntu16.04 + OpenCV源码 + Qt5.10 安装、配置
    DML和DQL
    初识MySql
    表单校验
    使用jQuery操作DOM
    jQuery中的事件与动画
    jQuery选择器
    初识jQuery
    JavaScript对象及初识OOP
    JavaScript操作DOM对象
  • 原文地址:https://www.cnblogs.com/ccku/p/13512068.html
Copyright © 2011-2022 走看看