您当前的位置:网站人生就是搏首页>>建站资讯>>seo技术seo技术

点击数:74182012-03-22 22:50:53 来源: www.essj.cn

新闻摘要:最近比较喜欢做一些细节的优化,主要是图片优化、定义以前没定义过的图片的宽、高及页面代码、css、js优化的方面。最近在使用一个谷歌的page speed,这个当然必须在火狐浏览器下才支持的插件,里边提到一项开启keep-alive,具体是什么是keep-alive模式?开启keep-alive的好处有哪些呢?

最近比较喜欢做一些细节的优化,主要是图片优化、定义以前没定义过的图片的宽、高及页面代码、css、js优化的方面。最近在使用一个谷歌的page speed,这个当然必须在火狐浏览器下才支持的插件,里边提到一项开启keep-alive,具体是什么是keep-alive模式?开启keep-alive的好处有哪些呢?现把关于这方面的东西分享出来,大家参考下。

一、什么是keep-alive模式?

我们知道http协议采用“请求-应答”模式,当使用普通模式,即非keepalive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(http协议为无连接的协议);当使用keep-alive模式(又称持久连接、连接重用)时,keep-alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,keep-alive功能避免了建立或者重新建立连接。
http 1.0中默认是关闭的,需要在http头加入"connection: keep-alive",才能启用keep-alive;http 1.1中默认启用keep-alive,如果加入"connection: close ",才关闭。目前大部分浏览器都是用http1.1协议,也就是说默认都会发起keep-alive的连接请求了,所以是否能完成一个完整的keep- alive连接就看服务器设置情况。

2.开启keep-alive的好处

keepalive 选项到底有什么用处?如果你用过mysql ,应该知道mysql的连接属性中有一个与keepalive 类似的persistent connection,即:长连接(pconnect)。该属性打开的话,可以使一次tcp连接为同一用户的多次请求服务,提高了响应速度。

比如很多网页中图片、css、js、html都在一台server上,当用户访问其中的html网页时,网页中的图片、css、js都构成了访问请求,打开keepalive 属性可以有效地降低tcp握手的次数(当然浏览器对同一域下同时请求的图片数有限制,一般是2),减少httpd进程数,从而降低内存的使用(假定prefork模式)。maxkeepaliverequests 和keepalivetimeout 两个属性在keepalive =on时起作用,可以控制持久连接的生存时间和最大服务请求数。

不过,上面说的只是一种情形,那就是静态网页居多的情况下,并且网页中的其他请求与网页在同一台server上。当你的应用动态程序(比如:php )居多,用户访问时由动态程序即时生成html内容,html内容中图片素材和css、js等比较少或者散列在其他server上时,keepalive =on反而会降低apache 的性能。为什么呢?

前面提到过,keepalive =on时,每次用户访问,打开一个tcp连接,apache 都会保持该连接一段时间,以便该连接能连续为同一client服务,在keepalivetimeout还没到期并且maxkeepaliverequests还没到阈值之前,apache 必然要有一个httpd进程来维持该连接,httpd进程不是廉价的,他要消耗内存和cpu时间片的。假如当前apache 每秒响应100个用户访问,keepalivetimeout=5,此时httpd进程数就是100*5=500个(prefork 模式),一个httpd进程消耗5m内存的话,就是500*5m=2500m=2.5g,夸张吧?当然,apache 与client只进行了100次tcp连接。如果你的内存够大,系统负载不会太高,如果你的内存小于2.5g,就会用到swap,频繁的swap切换会加重cpu的load。

现在我们关掉keepalive ,apache 仍然每秒响应100个用户访问,因为我们将图片、js、css等分离出去了,每次访问只有1个request,此时httpd的进程数是100*1=100个,使用内存100*5m=500m,此时apache 与client也是进行了100次tcp连接。性能却提升了太多。
当keepalive =on时,keepalivetimeout的设置其实也是一个问题,设置的过短,会导致apache 频繁建立连接,给cpu造成压力,设置的过长,系统中就会堆积无用的http连接,消耗掉大量内存,具体设置多少,可以进行不断的调节,因你的网站浏览和服务器配置 而异。
小总结:
1、当你的server内存充足时,keepalive =on还是off对系统性能影响不大。
2、当你的server上静态网页(html、图片、css、js)居多时,建议打开keepalive 。
3、当你的server多为动态请求(因为连接数据库,对文件系统访问较多),keepalive 关掉,会节省一定的内存,节省的内存正好可以作为文件系统的cache(vmstat命令中cache一列),降低i/o压力。
文章地址:http://www.essj.cn/seo/n29.html  转载请注明作者及原始出处!
【文章如需转载请注明:转载自临朐天宇网络:http://www.essj.cn】
本文地址:http://www.essj.cn/seo/n29.html
【作者:潍坊seo】

工作日:9:00-21:00

邮箱[email protected]

扫一扫加我好友扫描二维码