今天出现了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集群性能优化主要通过调整MPM配置和采用其他优化策略实现,而日志切分则是通过工具如cronolog进行,以提高日志管理和分析的效率。这两者结合,可以帮助我们更好地维护和优化Apache服务器在集群环境...
通过以上对Apache性能优化的知识点详细介绍,我们可以看出Apache通过其灵活的配置选项和不同的MPM模式为用户提供了一种高效稳定的服务方案。正确选择并配置适合自身需求的MPM模式对于提升Apache服务器的性能至关重要...
### Apache性能优化技巧详解 #### 一、简介 在当今高度依赖互联网的世界中,Web服务器的性能至关重要。Apache作为全球最流行的Web服务器之一,其性能直接影响到网站的响应速度及用户体验。本文将详细介绍25个实用...
其中,`MaxClients`定义了可以同时处理的最大客户端连接数,是性能优化的重点之一。 - **连接数调整**: - **理论最大值计算**:根据服务器硬件资源(如内存大小),可以大致估算出能够支持的最大并发连接数。例如...
### Apache 2.2 安装、优化与模块配置...综上所述,Apache 2.2 的安装和配置涉及到多个方面,包括源码编译、模块选择、MPM配置以及安全性和性能优化等。合理地配置这些参数可以显著提高Apache服务器的性能和稳定性。
【Apache2中文教程】 ...总之,本“Apache2中文教程”将带你全面了解Apache2服务器的各个方面,包括基本配置、虚拟主机、安全设置、性能优化和故障排查。通过学习,你将能够熟练地管理和维护自己的Apache2服务器。
Apache HTTP Server 是世界上最广泛使用的Web服务器之一,以其稳定性和可扩展性著称。...以上就是25个Apache性能优化技巧,通过这些方法,可以显著提升Apache服务器的处理能力和响应速度,确保网站和服务的高效运行。
Apache 优化和模块安装是提升Web服务器性能的关键步骤。Apache 是一个广泛应用的开源HTTP服务器,它的性能可以通过调整配置参数和安装特定模块来显著提高。在这个过程中,我们将关注两个主要方面:Apache 的最大连接...
为了实现Apache服务器的最佳性能,我们需要对其进行参数优化。以下是一些关键的Apache配置参数及其优化建议: 1. **MaxClients**:这个参数定义了Apache可以同时处理的最大连接数。如果设置得过高,可能会耗尽系统...
Apache的性能优化主要涉及其多处理模块(MPM)。Apache提供了三种MPM:prefork、worker和event。prefork模型使用单独的进程来处理每个请求,适用于不支持线程安全的环境,配置时需要设置StartServers、...
通过上述步骤,我们不仅完成了 Apache 与 Tomcat 的整合,还实现了集群部署和性能优化。这种配置方式能够充分利用 Apache 和 Tomcat 的优势,提供更高效、稳定的服务。同时,也需要注意在实际操作过程中根据具体环境...
以下是一些关键的优化策略,这些策略可以提高Apache服务器的性能、减少资源消耗并改善用户体验。 1. **模块管理**: Apache有很多模块,但并非所有模块在每个网站中都是必需的。不必要的模块会占用内存并增加启动...
以下是一些关键的Apache性能优化策略: 1. **移除不用的模块**:Apache在安装时会包含很多模块,但并非所有模块都会被使用。移除不必要的模块可以减少内存占用,提高服务器性能。 2. **使用mod_disk_cache而非mod_...
然而,随着网站流量的增长,性能优化变得至关重要。以下是关于"Apache+php+mysql相关优化"的一些核心知识点,旨在提高系统效率、减少资源消耗并提升用户体验。 **Apache优化** 1. **配置优化**:调整`httpd.conf`...
Apache性能优化是网站管理员和运维工程师在搭建高效、稳定的服务环境中不可或缺的技能之一。特别是在Windows Server 2003系统中,Apache的性能优化显得尤为重要。以下是对文档中提到的Apache性能优化方法的详细说明...
五、性能优化 为了提升Apache2的性能,可以启用模块如mod_deflate(压缩输出内容)、mod_expires(设置静态资源过期时间)、mod_cache(缓存响应内容)。同时,调整MaxKeepAliveRequests、KeepAliveTimeout等参数...
Apache 中配置最大并发用户数 TCP 连接设置 Apache 是一个功能强大且灵活的 Web 服务器,可以根据不同的需求...通过了解 MPM 模块和配置参数,可以根据不同的需求进行优化和调整,以提高 Apache 的性能和可扩展性。