苏州网站建设服务,泰安肥城做网站的公司,安卓盒子 做网站,家里做网站买什么服务器好转载链接#xff1a;http://hi.baidu.com/jx_iben/item/d5fe91feed74495ec9f337f1 在网页开发过程中#xff0c;Keep-Alive是HTTP协议中非常重要的一个属性。大家知道HTTP构建在TCP之上。在HTTP早期实现中#xff0c;每个HTTP请求都要打开一个socket连接。这种做效率很低http://hi.baidu.com/jx_iben/item/d5fe91feed74495ec9f337f1 在网页开发过程中Keep-Alive是HTTP协议中非常重要的一个属性。大家知道HTTP构建在TCP之上。在HTTP早期实现中每个HTTP请求都要打开一个socket连接。这种做效率很低因为一个Web 页面中的很多HTTP请求都指向同一个服务器。例如很多为Web页面中的图片发起的请求都指向一个通用的图片服务器。持久连接的引入解决了多对已请求服务器导致的socket连接低效性的问题。它使浏览器可以再一个单独的连接上进行多个请求。浏览器和服务器使用Connection头ilai指出对Keep-Alive的支持。 笔者在去年遇到一个跟Keep-Alive的问题 问题现象 一个JSP页面居然要耗时40多秒。网页中有大量的图片的CSS 问题解决 原因也找了半天原来Apache配置里面把Keep-Alive的开关关闭了。这个是个大问题工程师为什么要关闭它原来他考虑的太简单了我们知道Apache适合处于短连接的请求处理时间越短并发数才能上去原来他是这么考虑但是没有办法只能这样了还是打开Keep-Alive开关吧。 当然不是所有的情况都设置KeepAlive为On下面的文字总结比较好 【在使用apache的过程中KeepAlive属性我一直保持为默认值On其实该属性设置为On还是Off还是要具体问题具体分析的在生产环境中的影响还是蛮大的。 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个用户访问KeepAliveTimeOut5此时httpd进程数就是100*5500个(prefork 模式)一个httpd进程消耗5M内存的话就是500*5M2500M2.5G夸张吧当然Apache 与Client只进行了100次TCP连接。如果你的内存够大系统负载不会太高如果你的内存小于2.5G就会用到Swap频繁的Swap切换会加重CPU的Load。 现在我们关掉KeepAlive Apache 仍然每秒响应100个用户访问因为我们将图片、js、css等分离出去了每次访问只有1个request此时httpd的进程数是100*1100个使用内存100*5M500M此时Apache 与Client也是进行了100次TCP连接。性能却提升了太多。 总结 1、当你的Server内存充足时KeepAlive On还是Off对系统性能影响不大。 2、当你的Server上静态网页(Html、图片、Css、Js)居多时建议打开KeepAlive 。 3、当你的Server多为动态请求(因为连接数据库对文件系统访问较多)KeepAlive 关掉会节省一定的内存节省的内存正好可以作为文件系统的Cache(vmstat命令中cache一列)降低I/O压力。 PS当KeepAlive On时KeepAliveTimeOut的设置其实也是一个问题设置的过短会导致Apache 频繁建立连接给Cpu造成压力设置的过长系统中就会堆积无用的Http连接消耗掉大量内存具体设置多少可以进行不断的调节因你的网站浏览和服务器配置 而异