`

Apache 中 Keep Alive 配置的合理使用

 
阅读更多
在 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,可以提高文件系统访问的性能,并且系统会更加稳定。


  补充1:
  关于是否应该关闭 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 选项是划算的,否则就可以考虑打开。

     补充2: KeepAlive 该参数控制Apache是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型站点来说,通常设置为off以关闭该支持。

     补充3: 如果服务器前跑有应用squid服务,或者其它七层设备,KeepAlive On 设定要开启持续长连接

实际在 前端有 squid 的情况下, KeepAlive 很关键。记得 On
分享到:
评论

相关推荐

    apache性能调优配置

    通过合理地调整Apache的配置文件中的参数,特别是最大连接数,可以有效提升服务器处理高并发请求的能力,从而改善用户体验。在实际操作过程中,需要根据服务器的具体硬件配置和业务需求灵活调整相关参数,并结合实时...

    Apache2的http.conf文件翻译

    通过合理配置这些指令,管理员可以实现对Apache服务器的高度定制化管理,以满足不同场景的需求。 #### 二、关键配置项解析 ##### 1. ServerRoot - **定义**:该指令用来指定Apache服务器根目录的位置,即存放所有...

    Apache HTTP Serve 2.2.3

    6. **性能优化**:包括缓存机制、连接管理(如Keep-Alive)和多线程或多进程模型(如Prefork和Worker模型)。 7. **日志记录**:Apache可以记录详细的访问日志,便于分析服务器性能和用户行为。 描述中提到Apache ...

    apache tomcat6.0.29

    - 通过调整JVM参数、设置合理的线程池大小、开启连接器的Keep-Alive特性以及启用NIO(非阻塞I/O)模式,可以提升Tomcat的性能。 - 使用缓存和负载均衡策略也能有效改善响应时间和并发处理能力。 7. **社区支持与...

    ApacheTomcat8_jb51.rar

    5. **性能优化**:可以通过调整线程池大小、开启连接器的Keep-Alive功能、使用NIO连接器等方式优化Tomcat性能。 6. **监控**:可以使用JMX(Java Management Extensions)来远程监控Tomcat的状态和性能指标。 综上...

    使Delphi 6.0 支持 Apache 2.0

    重新编译你的程序,加入相应的Apache 的配置(具体配置方法请参照我以前的文章),启动Apache,打开浏览器。 ok! 没问题了吧!好。现在我们看看怎么在Delphi 6 里面实现Apache 2.0 的支持,实际上很简单,只要把...

    Apache负载均衡

    例如,可以通过SSL/TLS实现HTTPS连接,使用Keep-Alive功能减少TCP连接的创建和销毁,以及定期检查后端服务器的健康状态。 总的来说,Apache2.2与Tomcat7的集成负载均衡是一项重要的技术实践,能够有效地提升Web应用...

    apache-tomcat-6.0.10

    4. 性能优化:可以通过调整线程池大小、启用连接器的Keep-Alive等功能提升性能。 总的来说,Apache Tomcat 6.0.10作为一个老牌的Java Web服务器,尽管现在已被更新版本替代,但它的设计理念和基本功能对理解Web...

    apache-tomcat-5.5.33

    优化Tomcat性能的方法包括调整JVM参数、增加线程池大小、启用连接器的Keep-Alive选项、使用压缩和GZIP压缩减少网络传输,以及通过监控和分析工具定期检查服务器状态。 **与其它应用服务器的集成** Tomcat可以与EJB...

    apache-tomcat-5.5.26

    - 通过调整`server.xml`中的线程池设置、开启连接器的Keep-Alive选项、使用NIO连接器等方式可以提升Tomcat的性能。 - 使用内存池和JVM调优也能改善Tomcat在高并发情况下的表现。 8. **API文档**: - 提供的API...

    apache2.2CHM中文版

    3. **性能优化**:Apache 2.2引入了更好的多线程支持和连接处理策略,如预读取和Keep-Alive连接,提高了服务器处理高并发请求的能力。 4. **配置改进**:配置文件的语法有所优化,更易理解和管理。例如,可以使用...

    ( apache-tomcat-7.0.33.rar )

    6. **性能优化**:Tomcat可以通过调整各种配置参数来优化性能,例如调整线程池大小、开启连接器的Keep-Alive选项、设置最大请求队列长度等。 7. **集群与负载均衡**:对于高可用性和高流量的环境,可以配置Tomcat...

    Apache Tomcat 6.0.14

    9. **性能优化**:Tomcat 6.0.14提供了多种性能优化策略,如调整最大线程数、开启连接器的Keep-Alive功能、启用NIO连接器以提高并发能力,以及使用内存池优化内存分配。 10. **社区支持**:作为开源项目,Apache ...

    Apache2 httpd.conf 中文版

    - **KeepAlive**:是否启用持久连接(keep-alive),开启后可以减少建立新连接的时间。 - 示例:`KeepAlive On` - **MaxKeepAliveRequests**:一个客户端可以使用的持久连接的最大次数,默认值通常较高。 - 示例...

    apache-tomcat-7.0.63.zip

    这个"apache-tomcat-7.0.63.zip"文件是Tomcat的7.0.63版本,一个非安装版的发布,这意味着它不需要通过传统的安装程序在操作系统上设置,而是可以直接解压到指定目录并进行配置使用。这个版本被称为“非常干净”,...

    apache tomcat

    对于性能优化,Tomcat可以通过调整线程池大小、开启HTTP压缩、启用Keep-Alive等方式提升。此外,还可以通过调整内存分配、使用缓存、优化JVM参数等手段进一步提升性能。 总之,Apache Tomcat作为Java Web应用服务器...

    httpd.conf配置文件

    7. **KeepAlive**:启用或禁用持久连接(即 HTTP/1.1 中的 Keep-Alive),提高性能。 ```apache KeepAlive On ``` 8. **MaxKeepAliveRequests**:在一个连接中允许的最大请求数量。 ```apache ...

    Apache2.2.chm.rar

    在使用Apache 2.2.chm文档时,用户可以找到关于如何安装Apache,配置虚拟主机,设置安全策略,优化性能,以及解决常见问题的具体步骤和指导。对于Web开发者和系统管理员来说,这是一个非常宝贵的资源,可以帮助他们...

    apache-tomcat-5.5.23

    Apache Tomcat 5.5.23 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,主要用于运行Java Web应用程序。Tomcat以其轻量级、高性能和易于管理的特性,在开发和部署...

Global site tag (gtag.js) - Google Analytics