博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache的KeepAlive设置与优化 - 老黄纸条箱
阅读量:2403 次
发布时间:2019-05-10

本文共 2279 字,大约阅读时间需要 7 分钟。

原贴:http://cache.baidu.com/c?m=9d78d513d99003fc09b7c3690d678e314e16d33d679387013894cd47c9221d03506790a63a675541c4c50b3852f31c0cb9b0217240527de8869ed51b9ae4c57469952d677a1e8c4319851afcc8417491709558eaac4ae1bbfb62c3a58184dc5600cb&p=867dca15d9c246be00be9b781654&user=baidu
Apache
KeepAlive设置与优化 - 老黄纸条箱
| 2008-6-1 18:10:56

前些日子一个朋友系统上出了点小问题,给他说了些优化的策略,回过头来,他听说关掉ApacheKeepAlive可以提高性能,特别要我帮他说说。我就在这里记下个纸条,以后备用。

先来说说ApacheKeepAlive的设置。

KeepAliveApache Core中的设置说明:

Keep-Alive扩展自HTTP/1.0和HTTP/1.1的持久链接特性。提供了长效的HTTP会话,用以在同一个TCP连接中进行多次请求。在某些情况下,这样的方式会对包含大量图片的HTML文档造成的延时起到50%的加速作用。在Apache1.2版本以后,您可以设置 KeepAlive On 以启用持久链接。
对于HTTP/1.0的客户端来说,仅当客户端指定使用的时候才会使用持久链接连接。此外,仅当能够预先知道传输的内容长度时,才会与HTTP/1.0的客户端建立持久链接连接。这意味着那些长度不定的内容,诸如CGI输出、SSI页面、以及服务器端生成的目录列表等内容一般来说将无法使用与HTTP/1.0客户端建立的持久链接连接。而对于HTTP/1.1的客户端来说,如果没有进行特殊指定,持久将是默认的连接方式。如果客户端进行了请求,将使用分块编码以解决在持久链接里发送未知长度内容的问题。

另一个相关的是KeepAliveTimeout在Apache Core中的设置说明:

Apache在关闭持久连接前等待下一个请求的秒数。一旦收到一个请求,超时值将会被设置为Timeout指令指定的秒数。
对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。

后最后还有一个相关的是MaxKeepAliveRequests在Core中的说明:

MaxKeepAliveRequests指令限制了当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。

通过Apache的设置说明,我们已经能明白KeepAlive的原理。在对于一个包含许多图片的网页来说, 客户端会在瞬间发出多个HTTP请求,此时多次建立TCP连接会大大降低响应速度。 此时通过持续连接,可以允许用户在一个TCP连接中发出多个HTTP请求, 减少TCP连接建立次数,提高响应速度。我们可以通过access_log统计出连续HTTP请求出现的次数、间隔时间、访问量, 以确定 MaxKeepAliveRequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小发挥不了持续连接的作用;太大了,持续连接迟迟不断, 浪费TCP连接数不说,更糟糕的是系统中的 httpd 进程数目会因此不断增加, 使得系统负载升高,甚至会导致服务器失去响应。

但是当你的服务器只是在处理动态网页请求时,由于用户很少会瞬间请求多个动态网页 (一般都是打开页面之后阅读好半天才点下一页), 此时打开KeepAlive无异于浪费TCP连接数。

哪么什么决定着我们是不是要开启KeepAlive的因素就很简单的确定出来了,就是说在用户一个页面请求中是否会向服务器发出多个HTTP的请求。

对于我的哪个朋友,他们的服务器中有着动态应用,有着所有的图片,我看了一下,估算他们的首页中发出的请求类型为以下几种:text/html、text/css、application/octet-stream、text/javascript、image/gif、image/jpeg。一个首页发出了181次请求(我看了所有的请求,注意所有的请求都是同一个域名)。这里可能由应用程序生成的只有text/html和application/octet-stream,这种请求中text/html只有一次,而application/octet-stream也只有4次。哪么关闭KeepAlive对他们有帮助吗?我的回复是没有帮助,而且会让服务器的服务质量更差!

如果是这样的情况,怎么办呢?我的建议如下:

1.如果我们每一个页面中只有一个请求是动态生成的,而180个(里面可能有4个不是,不过不重要了)都是静态的,哪么应该将静态与动态分开到两个服务器上(一台机器都可以)。将动态应用的KeepLive关闭,将静态服务器的KeepLive打开。
2.前端前部署四层交换或七层交换或缓存服务器,这样会让系统的扩展做起来,同时也可以让服务器的KeepLive打开时有更好的效果。
3.应该考虑优化下他们的apache了,听说一个进程有高达xxM的内存占用,比较恐怖,在10M以内比较正常的说,不过这是一个option了。

转载地址:http://ovtob.baihongyu.com/

你可能感兴趣的文章
传说中的100句英语可以帮你背7000单词(zt)
查看>>
网管IT服务管理五个心得 (zt)
查看>>
循序渐进学SAP系列(一):--SAP该如何入门
查看>>
PMP考试经验谈(转载)
查看>>
緣分是找到包容你的人(转载)
查看>>
关注人力资源管理的十大变化(转)
查看>>
知识管理与业务流程重组(转载)
查看>>
世界经典广告词欣赏
查看>>
35岁前应该做好的十件事
查看>>
创业从小做起的十条忠告(转)
查看>>
妙语连珠94句
查看>>
物流系统管理课程(四)
查看>>
ERP必须基于企业流程管理(转载)
查看>>
职场失意需检讨的六大问题(zt)
查看>>
准时生产方式JIT(zt)
查看>>
对itpub博客的想法
查看>>
第1课 企业信息门户
查看>>
男人必须明白22个道理(转载)
查看>>
第十章 组织变革
查看>>
第4课 OA基础
查看>>