httpd.conf文件如何配置KeepAlive

回复 收藏
KeepAlive  意思为是否长连接。 后边可以设置 On 或者 Off
简单理解就是这样: 如果设置成On,那么当apache完成用户的请求后,那么apache进程不会断开用户的请求连接,依然保持连接状态。设置成Off则当apache完成用户的请求后,那么apache进程会立即断开和用户的请求连接。
如果,完成用户的连接依然连接,这样的好处是:当该用户的请求在过来时,apache会用这个已经建立的连接,不需要重新创建连接。这样会节省CPU的资源。但是却耗费了内存。为什么呢?可以假设这样的场景。假如keepalive 超时时间为10s,而每1s中有100个用户请求访问,每个用户3次连接,每个连接耗费2M内存,那么10s内建立的连接次数为1000次(跟用户每s请求次数无关),消耗内存为1000*2=2000M,相反,如果不保持长连接,同样的环境场景下,每1s内有100*3个连接,下一秒还是100*3个连接,也就是说永远都是100*3个连接,那么1s内甚至10s内消耗的内存为100*3*2=600M。 然而,在这10s内创建的连接次数为100*3*10=3000次,这样肯定消耗了更多的cpu资源。毕竟每次tcp连接都是需要cpu去处理的。

问题来了,既然知道长连接与否的利与弊,那么如何判定什么时候On,什么时候Off?
在上面的举例中,涉及到了一个数,那就是每个用户在1s内请求的次数,你再回去好好看看,如果把3改为1,是不是10s内得到的连接次数总和是一样的。对!那么这样无论是On还是Off,消耗的CPU资源是一样的。所以,我们考虑3种情况:
  1。用户浏览一个网页时,除了网页本身外,还引用了多个 javascript 文件,多个 css 文件,多个图片文件,并且这些文件都在同一个 HTTP 服务器上。
  2。用户浏览一个网页时,除了网页本身外,还引用一个 javascript 文件,一个图片文件。
  3。用户浏览的是一个动态网页,由程序即时生成内容,并且不引用其他内容。

对于上面3中情况,我认为:1 最适合打开 KeepAlive ,2 随意,3 最适合关闭 KeepAlive(连接消耗的内存比较大)

总结一下:
  在内存非常充足的服务器上,不管是否关闭 KeepAlive 功能,服务器性能不会有明显变化;
  如果服务器内存较少,或者服务器有非常大量的文件系统访问时,或者主要处理动态网页服务,关闭 KeepAlive 后可以节省很多内存,而节省出来的内存用于文件系统Cache,可以提高文件系统访问的性能,并且系统会更加稳定。
    目前的服务器,CPU很强,所以不用考虑频繁的tcp连接对cpu造成的压力,那还让它长连接干什么,故,建议关闭你的长连接吧!!!

PS: 如果,你的服务器上请求量很大,那你最好还是关闭这个参数吧。我试过一次,打开长连接,并且设置超时时间为30s,结果仅仅十几s就把所有的httpd进程跑满。这样很危险的,直接让用户等待,等30s,这不扯淡嘛?即使是你设置成3s,照样会让用户等待3s,这样很不合理的。所以,归根结蒂还是关闭长连接吧,这样效率会更高。
2011-11-24 16:39 举报
已邀请:
0

泡沫。

赞同来自:

很好,看懂一些吧
0

21emerald

赞同来自:

学习了
0

qinxuekun199

赞同来自:

"即使是你设置成3s,照样会让用户等待3s" 这句麻烦楼主解释下,如果程序执行1s完成,难道还要等到3s后才能返回?这和tcp连接有悖啊
0

善思致用

赞同来自:

qinxuekun199 发表于 2016-3-14 18:32
"即使是你设置成3s,照样会让用户等待3s" 这句麻烦楼主解释下,如果程序执行1s完成,难道还要等到3s后才能返 ...

这个意思是服务器用户访问量很大的时候,你开启长连接,超时间时间设为3s,用户访问创建的连接3s内cpu不会去释放,假如访问量特别大,很容易就把http进程跑满,3s内不释放资源的话后面访问的用户就要等3s
0

wanmei

赞同来自:

学习

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: