• Apache常用2种工作模式prefork和worker比较


    Apache两种常用工作模式:prefork和worker。

    prefork MPM

    prefork是一个非线程型的、预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高,但内存使用比较大。

    可通过了解prefork的配置认识prefork,配置位置:apache/conf/extra/httpd-mpm.conf

    <IfModule mpm_prefork_module>
        StartServers          5
        MinSpareServers       5
        MaxSpareServers      10
        MaxClients          150
        MaxRequestsPerChild   0
    </IfModule>

    参数:

    –StartServer:服务器启动时一次建立的子进程数量

    –MinSpareServers:设置空闲子进程的最小数量。如果当前空闲子进程数少于这个值,那么Apache会从一秒创建一个进程,第二秒继续创建两个…直到满足MinSpareServers设置的值为止。不需要设的太大。

    –MaxSpareServers:设置空闲子进程的最大数量。如果空闲子进程数量超过MaxSpareServers,apache则会kill掉多余空闲子进程。

    –MaxClients:设定apache同一时间处理的最大请求数量。任何超过MaxClients的请求都将进入等候对列。默认最大为256,要设置大于256时,必须同时设置ServerLimit(保持ServerLimit大于或等于MaxClient)。如果发现请求处理很慢但系统资源使用少,就需要调高这个参数。

    –MaxRequestsPerChild:每个子进程最多处理的请求数量,到达这个值,子进程将会自动结束,这样可以避免内存泄漏。设为0则永远不结束。

    –ServerLimit:用于限制MaxClient,最大值为20000,超过了就需要修改apache内核重新编译。注意此参数必须放在其他参数之前。

    最重要的值是MaxClients允许足够多的工作进程,同时又不会导致服务器当机。
    可通过查看httpd进程数:#ps -ef | grep httpd | wc -l,选择高峰期,结合当时服务器资源使用情况,来设置MaxClients。

    worker MPM

    worker是支持混合的多线程多进程的多路处理的MPM,使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只处理一个连接,内存使用较低,但一个线程崩溃,就会影响同一个进程下的所有线程。

    同样通过配置认识worker

    <IfModule mpm_worker_module>
        StartServers          2
        MaxClients          150
        MinSpareThreads      25
        MaxSpareThreads      75 
        ThreadsPerChild      25
        MaxRequestsPerChild   0
    </IfModule>

    参数:

    –StartServer:服务器启动时一次建立的子进程数量

    –MaxClients:设定apache同一时间处理的最大请求数量,这里是指最大线程数量,大小仍受ServerLimit限制且必须是ThreadsPerChild的倍数。

    –MinSpareThreads:设置最少的空闲线程数

    –MaxSpareServers:设置最大的空闲线程数,必须大于等于MinSpareThreads加上ThreadsPerChild的和(因为每个子进程拥有的线程数是固定的)

    –ThreadsPerChild:每个子进程建立的常驻线程,之后不会再创建新的线程。大小受ThreadLimit限制。

    –MaxRequestsPerChild:每个子进程最多处理的请求数量,同prefork的一样

    –ServerLimit:服务器允许配置的进程数上限,和ThreadLimit共同限制MaxClients(MaxClients <= ServerLimit * ThreadsPerChild)。

    –ThreadLimit:TreadsPerChild可以配置的线程数上限,默认为64。

    根据网友一些测试数据,实际情况下还是选prefork工作模式较好。

    默认情况下,Linux下的Apache是prefork模式,切换成worker模式步骤如下:

    prefork和worker模式的切换

    1.将当前的prefork模式启动文件改名

    mv httpd httpd.prefork

    2.将worker模式的启动文件改名

    mv httpd.worker httpd

    3.修改Apache配置文件

    vim /usr/local/apache2/conf/extra/httpd-mpm.conf

    找到里边的如下一段,可适当修改负载等参数:

    <IfModule mpm_worker_module>
    	StartServers 2
    	MaxClients 150
    	MinSpareThreads 25
    	MaxSpareThreads 75
    	ThreadsPerChild 25
    	MaxRequestsPerChild 0
    </IfModule>

    4.重新启动服务

    /usr/local/apache2/bin/apachectl restart

    即可换成worker方式启动apache2

    处于稳定性和安全性考虑,不建议更换apache2的运行方式,使用系统默认prefork即可。另外很多PHP模块不能工作在worker模式下,例如redhat Linux自带的PHP也不能支持线程安全。所以最好不要切换工作模式。

    网友评论:

    for redhat
    在 /etc/sysconfig/httpd 打开 #HTTPD=/usr/sbin/httpd.worker 的注释

    请教 .mpm_worker +mod_php 有在用到生产么?

    worker mpm一般不会跟mod_php搭配,worker mpm一般都是跟apache的mod_fcgid 搭配,然后PHP要安装php-cgi 来跑PHP的。


    海哥CentOS博客的LAMP一键安装包写到:

    ++++++++++++++++++++++++++++++++++++++++++++++++
    echo "select the mpm of apache"
    echo "1) prefork (Recommend)"
    echo "2) worker (Multi-threaded)"
    echo "3) event (Multi-threaded,not support ssl.)"
    ++++++++++++++++++++++++++++++++++++++++++++++++

    延伸阅读:

    Apache prefork 模块指令分析

  • 相关阅读:
    欧拉函数(线性筛)(超好Dong)
    欧拉函数(线性筛)(超好Dong)
    线性素数筛(欧拉筛)(超级好的MuBan)
    线性素数筛(欧拉筛)(超级好的MuBan)
    Fire Game (FZU 2150)(BFS)
    Fire Game (FZU 2150)(BFS)
    Fantasy of a Summation (LightOJ
    Java——接口
    Java——异常处理
    Java——数组
  • 原文地址:https://www.cnblogs.com/52php/p/5668844.html
Copyright © 2020-2023  润新知