使用Apache作为HTTP服务器的站点,不可避免的会遇到这个问题:apache负载很低,但是访问web服务器非常慢。排除脚本程序的原因后,基本上就是apache设置问题。
以下内容或许能够帮助解决这个问题。
1. 首先要了解Apache采用的MPM(Multi -Processing Modules,多道处理模块)
MPM是Apache的核心,它的作用是管理网络连接、调度请求。
Apache2.0 中MPM分为3种(perfork、worker、event)。perfork从Apache1.3中继承下来的,它采用的是进程管 理方式,所以它可以提供更可靠的性能和更好的兼容性;worker是Apache2.0中新增加的方式,它采用了线程控制方法,可以比perfork更节 约系统开销、处理更多的数据量,但同时兼容性并不是很好,很多旧的程序无法工作在worker下;event仍处于试验阶段,它为每个任务分配不同的进程 池,目前不应该采用。
通过命令 httpd -l 可以获取目前Apache采用的是哪种MPM
本文仅针对perfork方式进行讨论
2. 了解perfork的工作方式
查看Apache2.0的配置文件httpd.conf,可以看到perfork的配置段,大致如下:
ServerLimit 256 StartServers 5 MinSpareServers 10 MaxSpareServers 15 MaxClients 256 MaxRequestsPerChild 4000
当Apache被启动时,Apache会自动创建StartServers个进程,并且尽力将空闲进程数保持在MinSpareServers和MaxSpareServers之间。
如果空闲进程小于MinSpareServers,Apache将会以大约每秒1个的速度新建进程。
如果空闲进程小于MaxSpareServers,Apache将会删除多余的空闲进程,释放服务器资源。
进程数的最大值由MaxClients控制,在Apache1.3中最大只能设置为256,但在Apache2.0中,可以通过在配置开头增加ServerLimit项目来突破256的限制,此时必须MaxClients ≤ ServerLimit ≤ 20000
MaxRequestsPerChild用来控制每个进程在处理了多少次请求之后自动销毁,这个参数可以设置为0表示无限(即不销毁进程)。
3. 优化perfork
首先,对于一个负载相对较高的网站来说,256的进程限制是不够的,如果服务器已经达到256的极限,那么接下去的访问就需要排队,这也就是为什么某些服务器负载不高,但是访问却很慢的原因之一。所以首先应该了解服务器在繁忙时的进程数量。
通过命令ps -ef|grep httpd|wc -l可以了解到当前系统中Apache进程数,通过设置ServerLimit和MaxClients来达到为服务器软扩容的目的。
然后,在访问量高峰期,经常会出现的情况是突然之间发生非常多的并发连接,然后突然之间减少了很多访问。如果Apache没有准备足够数量的预备进 程,那访问只能等待Apache每秒1个的新增进程,随后又要将多余的进程删除,那Apache只能一直忙于新建和销毁进程,大大地降低了访问速度。可以 适当增加StartServers、MinSpareServers、MaxSpareServers来使得Apache不需要一直忙于作无用功。
最后,强烈推荐MaxRequestsPerChild不要设置为0,设置为非0,可以保护Apache进程免遭内存泄漏的影响,因为你不知道运行在Apache上的应用程式在什么时候会出错导致内存泄漏。
设置完之后大致是这样的:
ServerLimit 1000 StartServers 30 MinSpareServers 30 MaxSpareServers 45 MaxClients 1000 MaxRequestsPerChild 4000
Apache MPM 公共指令
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mpm_common.html
更多精彩内容
http://zhumeng8337797.blog.163.com/blog/static/1007689142012228355490/
相关推荐
Apache服务器的连接并发数是指Apache服务器能够处理的最大并发请求数量。在prefork模式下,Apache服务器的连接并发数取决于httpd进程数,即StartServers、MinSpareServers、MaxSpareServers、ServerLimit、...
### Apache并发连接查看知识点详解 #### 一、引言 在服务器运维与管理过程中,了解Apache服务器的并发连接情况对于评估服务器性能、优化资源分配至关重要。通过查看Apache并发链接,我们可以直观地了解到Apache的...
- **SYN_RECV**:表示接收到了SYN(同步序列编号)包,连接请求正在等待确认。 - **ESTABLISHED**:表示连接已经建立,数据正在传输。 - **FIN_WAIT1**和**FIN_WAIT2**:表示主动关闭连接的一方正在等待确认或...
例如,如果`SYN_RECV`数量过多,可能意味着服务器正忙于处理新的连接请求,这时可能需要增加`MaxClients`或减少`MaxRequestsPerChild`来提高并发处理能力。同样,过多的`TIME_WAIT`状态可能表明服务器未能有效地管理...
- **`MaxRequestsPerChild`**:单个工作进程所能处理的最大请求数量。达到这个值后,该工作进程会被终止,并重新启动一个新的工作进程来替代它,从而避免长期运行导致的内存泄漏等问题。这里配置的是`...
数据库连接池在Java应用程序中扮演着重要的角色,它能够有效地管理数据库连接,提高应用性能并降低资源消耗。DBCP是基于Jakarta Commons DBCP项目,它集成了BasicDataSource和PoolingDataSource等组件,使得数据库...
- `-n requests`:设置要发送的请求数量。 - `-c concurrency`:设置同时进行并发请求的用户数。 - `-t timelimit`:限制测试的总时间(秒)。 - `-v verbosity`:设置输出详细程度,数值越大,输出信息越详细。...
8. **注意事项**:配置合适的连接池参数至关重要,过大可能导致资源浪费,过小可能导致并发请求处理能力不足。另外,及时关闭数据库操作后的Statement和ResultSet,避免占用过多资源。 9. **与其他连接池比较**:...
这些调整有助于服务器更好地处理大量并发连接请求。 6. 硬件升级:虽然文章提到,最根本的提高负载能力方法是升级服务器硬件,但硬件升级并非总是可行或经济的选项,特别是在有限的成本预算下,软件优化提供了另一...
1. **基本用法**:`ab -n <请求总数> -c <并发数> <URL>`,其中-n指定总的请求数,-c指定并发连接数,URL是待测试的Web地址。 2. **其他参数**: - `-p`:指定包含POST数据的文件。 - `-T`:指定POST数据的MIME...
Apache DBCP(Database Connection Pool)是Apache组织提供的一款开源的数据库连接池组件,它能够有效地管理和优化数据库连接,提高应用程序的性能和效率。在Java应用程序中,使用DBCP可以帮助我们减少频繁创建和...
假设我们需要部署一个包含大量静态内容的网站,同时还需要处理成千上万的并发连接请求。在这种情况下,Nginx的优势更为明显: - **资源占用**:Nginx占用的内存较少,这意味着在相同的硬件配置下可以支持更多的并发...
- **吞吐量**: 单位时间内服务器能处理的请求数量。 - **资源利用率**: 如CPU、内存、磁盘I/O的使用情况,这可以帮助识别潜在的瓶颈。 - **稳定性**: 高并发下,系统是否能够持续稳定运行,无崩溃或错误发生。 通过...
这允许服务器处理更多的并发连接,但要注意不要过度设置,以免消耗过多系统资源。 接下来,我们来看如何编译和安装 Apache。在这个例子中,使用的是 Apache 2.2 版本,首先解压并进入源代码目录,然后修改了 worker...
此外,还可以考虑调整Apache的其他相关配置,如`MaxKeepAliveRequests`(每个连接允许的最大请求数量)和`KeepAlive`(是否启用KeepAlive特性)以优化性能和兼容性。对于高并发场景,可能需要减少`...
在集群环境中,当 Apache 遇到最大连接数不足的问题时,需要调整相关配置以提高其并发处理能力。本文将深入探讨如何在 Windows 环境下解决 Apache 连接数不足的问题。 首先,我们可以看到两种修改 Apache 配置以...
- `MaxRequestsPerChild`: 每个子进程处理的最大请求数量,为0表示无限制。 默认情况下,`MaxClients`值为250。为了提高性能,我们需要根据服务器的实际负载情况调整这些参数。例如: ```apache StartServers 5 ...