`
virtual_function
  • 浏览: 129726 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

今天出现了apache连接数明显不够用的情况:linux上观察最大连接数稳定在257,而客户端浏览器输入网址后长时间无响应,而一旦连接上之后,页面很快就打开了(因为配置了持久连接),针对这个问题,可以修改httpd.conf文件增大最大连接数;

centos5.4系统自带的apache默认采用的是prefork进程模型;在编译apache源码时,如果不用--with-mpm显式指定某种MPM,prefork就是缺省的MPM;它所采用的预派生子进程方式也是 Apache 1.3中采用的模式;prefork本身并没有使用到线程,一方面,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一,但是其开销也会比较大(进程自身的开销);

若使用prefork,在make编译和make install安装后,使用httpd -l来确定当前使用的MPM,应该会看到prefork.c(如果看到worker.c说明使用的是worker MPM)缺省生成的httpd.conf配置文件,里面包含如下配置段(这是默认的配置,不可用于生产环境): 

<IfModule prefork.c>
    StartServers 5 
    MinSpareServers 5 
    MaxSpareServers 10 
    MaxClients 150 
    MaxRequestsPerChild 0 
</IfModule>; 

工作原理(参数解释):

控制进程在最初建立 StartServers 个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足 MinSpareServers设置的值为止;这就是预派生(prefork)的由来;这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能;

MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程;这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1,如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers;

MaxRequestsPerChild设置的是每个子进程可处理的请求数;每个子进程在处理了MaxRequestsPerChild 个请求后将自动销毁;0意味着无限,即子进程永不销毁;虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处: 
1、可防止意外的内存泄漏; 
2、在服务器负载下降的时侯会自动减少子进程数;

MaxClients是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数;其缺省值 150是远远不够的,如果请求总数已达到这个值(可通过pgrep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕;这就是系统资源还剩下很多而HTTP访问却很慢的主要原因;系统管理员可以根据硬件配置和负载情况来动态调整这个值;虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256;如果把这个值设为大于256,那么 Apache将无法起动;

事实上,256对于负载稍重的站点也是不够的;在Apache 1.3中,这是个硬限制;如果要加大这个值,必须在 configure 前手工修改的源代码树下的src/include/httpd.h中查找 256,就会发现 #define HARD_SERVER_LIMIT 256 这行;把256改为要增大的值(如4000),然后重新编译Apache即可;在Apache 2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients;

下面是书城Apache的prefork配置段经过修改后的配置:

<IfModule prefork.c>
    StartServers       10
    MinSpareServers    15
    MaxSpareServers   40
    ServerLimit      2000
    MaxClients       1500
    MaxRequestsPerChild  10000
</IfModule>

修改之后,apache的最大连接数(进程数)修改为1500,而书城目前应该不会突破600,这样就可以避免在建立HTTP连接时的客户端出现较长等待的情况;

可以使用以下命令观察apache的最大连接数: watch -n 1 -d "pgrep httpd|wc -l"



Apache2.0的性能方面的改进最明显的变化就在于worker;

相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM;由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器;但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性;这种MPM的工作方式将是Apache 2.0的发展趋势; 

MPM(Multi -Processing Modules,多道处理模块):   MPM运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能

$ ./configure --help|grep mpm    显示如下: 
--with-mpm=MPM      Choose the process model for Apache to use.  
MPM={beos|worker|prefork|mpmt_os2|perchild|leader|threadpool} 

解释:Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作; 因此,我们主要关注prefork和worker这两种和性能关系最大的产品级MPM ;

在configure -with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd.conf中有以下配置段:
<IfModule worker.c>; 
    StartServers 2 
    MaxClients 150 
    MinSpareThreads 25 
    MaxSpareThreads 75 
    ThreadsPerChild 25 
    MaxRequestsPerChild 0 
</IfModule>; 

工作原理:由主控制进程生成 StartServers 个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求;同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250;这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节;

ThreadsPerChild是worker MPM中与性能相关最密切的指令;ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的;这时要显式使用 ThreadLimit指令,它的最大缺省值是20000;

Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients;如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程;默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)

需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值);

下面是一个修改后的 worker配置段: 
<IfModule worker.c>; 
    StartServers 3 
    MaxClients 2000 
    ServerLimit 25 
    MinSpareThreads 50 
    MaxSpareThreads 200 
    ThreadLimit 200 
    ThreadsPerChild 100 
    MaxRequestsPerChild 10000 
</IfModule>;

分享到:
评论

相关推荐

    Apache 集群性能优化 日志切分

    综上所述,Apache集群性能优化主要通过调整MPM配置和采用其他优化策略实现,而日志切分则是通过工具如cronolog进行,以提高日志管理和分析的效率。这两者结合,可以帮助我们更好地维护和优化Apache服务器在集群环境...

    apache性能优化

    通过以上对Apache性能优化的知识点详细介绍,我们可以看出Apache通过其灵活的配置选项和不同的MPM模式为用户提供了一种高效稳定的服务方案。正确选择并配置适合自身需求的MPM模式对于提升Apache服务器的性能至关重要...

    25个Apache性能优化技巧推荐

    ### Apache性能优化技巧详解 #### 一、简介 在当今高度依赖互联网的世界中,Web服务器的性能至关重要。Apache作为全球最流行的Web服务器之一,其性能直接影响到网站的响应速度及用户体验。本文将详细介绍25个实用...

    Apache2.2安全配置和性能优化

    其中,`MaxClients`定义了可以同时处理的最大客户端连接数,是性能优化的重点之一。 - **连接数调整**: - **理论最大值计算**:根据服务器硬件资源(如内存大小),可以大致估算出能够支持的最大并发连接数。例如...

    apache2.2_安装,优化、模块配置

    ### Apache 2.2 安装、优化与模块配置...综上所述,Apache 2.2 的安装和配置涉及到多个方面,包括源码编译、模块选择、MPM配置以及安全性和性能优化等。合理地配置这些参数可以显著提高Apache服务器的性能和稳定性。

    Apache2中文教程

    【Apache2中文教程】 ...总之,本“Apache2中文教程”将带你全面了解Apache2服务器的各个方面,包括基本配置、虚拟主机、安全设置、性能优化和故障排查。通过学习,你将能够熟练地管理和维护自己的Apache2服务器。

    25个Apache性能优化技巧.docx

    Apache HTTP Server 是世界上最广泛使用的Web服务器之一,以其稳定性和可扩展性著称。...以上就是25个Apache性能优化技巧,通过这些方法,可以显著提升Apache服务器的处理能力和响应速度,确保网站和服务的高效运行。

    apache优化和模块安装

    Apache 优化和模块安装是提升Web服务器性能的关键步骤。Apache 是一个广泛应用的开源HTTP服务器,它的性能可以通过调整配置参数和安装特定模块来显著提高。在这个过程中,我们将关注两个主要方面:Apache 的最大连接...

    apache 参数优化

    为了实现Apache服务器的最佳性能,我们需要对其进行参数优化。以下是一些关键的Apache配置参数及其优化建议: 1. **MaxClients**:这个参数定义了Apache可以同时处理的最大连接数。如果设置得过高,可能会耗尽系统...

    LAMP系统性能调优优化Apache和PHP.pdf

    Apache的性能优化主要涉及其多处理模块(MPM)。Apache提供了三种MPM:prefork、worker和event。prefork模型使用单独的进程来处理每个请求,适用于不支持线程安全的环境,配置时需要设置StartServers、...

    最新的tomcat 和apache 整合 集群 优化

    通过上述步骤,我们不仅完成了 Apache 与 Tomcat 的整合,还实现了集群部署和性能优化。这种配置方式能够充分利用 Apache 和 Tomcat 的优势,提供更高效、稳定的服务。同时,也需要注意在实际操作过程中根据具体环境...

    Apache配置优化总结

    以下是一些关键的优化策略,这些策略可以提高Apache服务器的性能、减少资源消耗并改善用户体验。 1. **模块管理**: Apache有很多模块,但并非所有模块在每个网站中都是必需的。不必要的模块会占用内存并增加启动...

    2021-2022年收藏的精品资料软件工程师Web开发者必知的25个Apache性能优化技巧.docx

    以下是一些关键的Apache性能优化策略: 1. **移除不用的模块**:Apache在安装时会包含很多模块,但并非所有模块都会被使用。移除不必要的模块可以减少内存占用,提高服务器性能。 2. **使用mod_disk_cache而非mod_...

    Apache+php+mysql相关优化

    然而,随着网站流量的增长,性能优化变得至关重要。以下是关于"Apache+php+mysql相关优化"的一些核心知识点,旨在提高系统效率、减少资源消耗并提升用户体验。 **Apache优化** 1. **配置优化**:调整`httpd.conf`...

    Wins2003系统中Apache性能优化方法

    Apache性能优化是网站管理员和运维工程师在搭建高效、稳定的服务环境中不可或缺的技能之一。特别是在Windows Server 2003系统中,Apache的性能优化显得尤为重要。以下是对文档中提到的Apache性能优化方法的详细说明...

    Apache2中文手册

    五、性能优化 为了提升Apache2的性能,可以启用模块如mod_deflate(压缩输出内容)、mod_expires(设置静态资源过期时间)、mod_cache(缓存响应内容)。同时,调整MaxKeepAliveRequests、KeepAliveTimeout等参数...

    Apache中配置最大并发用户数 tcp连接设置.docx

    Apache 中配置最大并发用户数 TCP 连接设置 Apache 是一个功能强大且灵活的 Web 服务器,可以根据不同的需求...通过了解 MPM 模块和配置参数,可以根据不同的需求进行优化和调整,以提高 Apache 的性能和可扩展性。

Global site tag (gtag.js) - Google Analytics