Apache 中 KeepAlive 配置的合理使用
2007-04-05 17:08:43
(转自互联网)
在 Apache 服务器中,KeepAlive 是一个布尔值,On 代表打开,Off 代表关闭,这个指令在其他众多的 HTTPD 服务器中都是存在的。
KeepAlive 配置指令决定当处理完用户发起的 HTTP 请求后是否立即关闭 TCP 连接,如果 KeepAlive 设置为 On,那么用户完成一次访问后,不会立即断开连接,如果还有请求,那么会继续在这一次 TCP 连接中完成,而不用重复建立新的 TCP 连接和关闭 TCP 连接,可以提高用户访问速度。
那么我们考虑3种情况:
1。用户浏览一个网页时,除了网页本身外,还引用了多个 javascript. 文件,多个 css 文件,多个图片文件,并且这些文件都在同一个 HTTP 服务器上。
2。用户浏览一个网页时,除了网页本身外,还引用一个 javascript. 文件,一个图片文件。
3。用户浏览的是一个动态网页,由程序即时生成内容,并且不引用其他内容。
对于上面3中情况,我认为:1 最适合打开 KeepAlive ,2 随意,3 最适合关闭 KeepAlive
下面我来分析一下原因。
在 Apache 中,打开和关闭 KeepAlive 功能,服务器端会有什么异同呢?
先看看理论分析。
打开 KeepAlive 后,意味着每次用户完成全部访问后,都要保持一定时间后才关闭会关闭 TCP 连接,那么在关闭连接之前,必然会有一个 Apache 进程对应于该用户而不能处理其他用户,假设 KeepAlive 的超时时间为 10 秒种,服务器每秒处理 50 个独立用户访问,那么系统中 Apache 的总进程数就是 10 * 50 = 500 个,如果一个进程占用 4M 内存,那么总共会消耗 2G 内存,所以可以看出,在这种配置中,相当消耗内存,但好处是系统只处理了 50次 TCP 的握手和关闭操作。
如果关闭 KeepAlive,如果还是每秒50个用户访问,如果用户每次连续的请求数为3个,那么 Apache 的总进程数就是 50 * 3 = 150 个,如果还是每个进程占用 4M 内存,那么总的内存消耗为 600M,这种配置能节省大量内存,但是,系统处理了 150 次 TCP 的握手和关闭的操作,因此又会多消耗一些 CPU 资源。
在看看实践的观察。
我在一组大量处理动态网页内容的服务器中,起初打开 KeepAlive 功能,经常观察到用户访问量大时Apache进程数也非常多,系统频繁使用交换内存,系统不稳定,有时负载会出现较大波动。关闭了 KeepAlive 功能后,看到明显的变化是: Apache 的进程数减少了,空闲内存增加了,用于文件系统Cache的内存也增加了,CPU 的开销增加了,但是服务更稳定了,系统负载也比较稳定,很少有负载大范围波动的情况,负载有一定程度的降低;变化不明显的是:访问量较少的时候,系统平均负载没有明显变化。
总结一下:
在内存非常充足的服务器上,不管是否关闭 KeepAlive 功能,服务器性能不会有明显变化;
如果服务器内存较少,或者服务器有非常大量的文件系统访问时,或者主要处理动态网页服务,关闭 KeepAlive 后可以节省很多内存,而节省出来的内存用于文件系统Cache,可以提高文件系统访问的性能,并且系统会更加稳定。
补充:
关于是否应该关闭 KeepAlive 选项,我觉得可以基于下面的一个公式来判断。
在理想的网络连接状况下,系统的 Apache 进程数和内存使用可以用如下公式表达:
HttpdProcessNumber = KeepAliveTimeout * TotalRequestPerSecond / Average(KeepAliveRequests)
HttpdUsedMemory = HttpdProcessNumber * MemoryPerHttpdProcess
换成中文:
总Apache进程数 = KeepAliveTimeout * 每秒种HTTP请求数 / 平均KeepAlive请求
Apache占用内存 = 总Apache进程数 * 平均每进程占用内存数
需要特别说明的是:
[平均KeepAlive请求] 数,是指每个用户连接上服务器后,持续发出的 HTTP 请求数。当 KeepAliveTimeout 等 0 或者 KeepAlive 关闭时,KeepAliveTimeout 不参与乘的运算从上面的公式看,如果 [每秒用户请求] 多,[KeepAliveTimeout] 的值大,[平均KeepAlive请求] 的值小,都会造成 [Apache进程数] 多和 [内存] 多,但是当 [平均KeepAlive请求] 的值越大时,[Apache进程数] 和 [内存] 都是趋向于减少的。
基于上面的公式,我们就可以推算出当 平均KeepAlive请求 <= KeepAliveTimeout 时,关闭 KeepAlive 选项是划算的,否则就可以考虑打开。
分享到:
相关推荐
### Apache2.2配置文件详解:深入理解Apache ...总之,`httpd.conf`配置文件是Apache服务器的核心,通过合理设置各项指令,可以确保服务器高效、安全地运行。理解和掌握这些配置项对于管理和维护Apache服务器至关重要。
因此,深入理解并合理配置httpd.conf是Apache服务器管理的关键。 ### 配置文件的组成部分 httpd.conf被分为三个主要部分: 1. **控制整个Apache服务器行为的部分**:这部分设置的参数会影响整个Apache服务器的...
通过以上详细介绍,我们可以了解到Apache配置文件中的主要参数及其作用,这对于管理和优化Apache服务器具有重要意义。合理配置这些参数可以帮助提升服务器性能、加强安全性并满足各种复杂的需求场景。
通过合理的配置,可以极大地提高Apache的性能和安全性,使其能够更好地适应不同的应用场景。本文将详细介绍Apache配置文件中的关键设置项及其作用。 #### 二、核心配置项解析 ##### 1. ServerTokens - **功能描述...
Apache 是一个广泛使用的开源 Web 服务器软件,它支持多种操作系统,并且提供了丰富的配置选项来满足不同场景的需求。 ### 1. ServerRoot 参数 `ServerRoot` 参数用于指定 Apache 服务器根目录的位置。这个目录...
3. **优化连接管理**:合理设置KeepAliveTimeout和MaxKeepAliveRequests等参数,改善连接管理。 4. **禁用不必要的模块和服务**:根据需求禁用不必要的Apache模块和服务,减少资源占用。 通过上述步骤,可以在一定...
通过合理配置这些指令,管理员可以实现对Apache服务器的高度定制化管理,以满足不同场景的需求。 #### 二、关键配置项解析 ##### 1. ServerRoot - **定义**:该指令用来指定Apache服务器根目录的位置,即存放所有...
默认情况下,记分板会被保存在共享内存中,但如果指定了文件名,则必须确保不会有两个Apache实例使用同一个记分板文件。例如,`ScoreBoardFile logs/apache_runtime_status`。 ```apache !mpm_netware.c> !per...
### Apache的httpd.conf文件配置详解 #### 一、引言 `httpd.conf`是Apache Web服务器的核心配置文件,它决定了服务器的行为、性能及功能。对于系统管理员来说,掌握...希望本文能帮助您更好地理解和使用Apache的配置。
通过理解和修改`httpd.conf`中的这些配置,可以定制Apache服务器以满足特定的需求,如设置安全策略、优化性能、实现虚拟主机等。此外,注意合理配置这些参数以确保服务器的稳定性和安全性,同时避免不必要的性能损耗...
- 性能优化,包括开启HTTP/1.1持久连接(mod_headers),配置合适的KeepAliveTimeout,使用mod_expires缓存静态内容,以及合理分配系统资源。 6. **错误日志和访问日志** - Apache2.2.29会生成错误日志和访问日志...
总之,Apache配置涉及诸多方面,合理设置能够提高服务器性能、保障安全性并满足不同应用场景的需求。对于CGI和PHP的配置,是增强动态网站功能的关键,理解并熟练运用这些配置是每个Web管理员必备的技能。
Apache服务器的配置文件是其核心组成部分之一,通过合理的配置可以极大地提升服务器性能和安全性。上述知识点涵盖了配置文件中的一些关键设置,包括全局环境参数、锁文件、记分板文件、进程PID文件、超时设置以及...
此外,合理配置访问控制、使用SSL/TLS加密通信、限制错误信息的公开以及定期审计配置,都是保障服务器安全的关键措施。 日志管理也是Apache 2.2中的一个重要部分。默认情况下,Apache将记录错误日志和访问日志,...
综上所述,Apache服务器的配置涉及多个方面,合理地调整这些配置项能够显著提升网站的性能和安全性。针对不同的应用场景选择合适的工作模式,并结合访问控制、日志管理等技术手段,可以更好地满足业务需求。
2. 性能优化:调整最大连接数、启用HTTP/2协议、使用缓存模块如mod_expires和mod_deflate,以及合理配置KeepAlive选项,都可以提高服务器性能。 六、日志管理 Apache2记录了丰富的日志信息,包括访问日志和错误日志...
- 优化Apache配置,如调整KeepAlive、MaxKeepAliveRequests和MaxConnectionsPerChild等参数,以提高服务器性能。 总的来说,Apache2.4在Windows上的部署为开发者提供了一个高效且灵活的本地开发环境。通过合理的...
在现代Web架构中,Apache作为一款广泛使用的开源Web服务器软件,提供了强大的代理功能。通过使用`ProxyPass`指令,管理员能够轻松地将远程服务器上的资源映射到本地服务器的URL空间内,从而实现资源的透明代理与分发...