﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小心别让日子把你给混了-随笔分类-网络学习</title><link>http://www.blogjava.net/cenly60/category/40239.html</link><description>光荣在于平淡...艰巨在于漫长...</description><language>zh-cn</language><lastBuildDate>Sun, 14 Jun 2009 05:25:53 GMT</lastBuildDate><pubDate>Sun, 14 Jun 2009 05:25:53 GMT</pubDate><ttl>60</ttl><item><title>学习Http系列_2:HTTP中的keep-alive</title><link>http://www.blogjava.net/cenly60/archive/2009/06/14/282135.html</link><dc:creator>60</dc:creator><author>60</author><pubDate>Sun, 14 Jun 2009 04:23:00 GMT</pubDate><guid>http://www.blogjava.net/cenly60/archive/2009/06/14/282135.html</guid><wfw:comment>http://www.blogjava.net/cenly60/comments/282135.html</wfw:comment><comments>http://www.blogjava.net/cenly60/archive/2009/06/14/282135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cenly60/comments/commentRss/282135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cenly60/services/trackbacks/282135.html</trackback:ping><description><![CDATA[<p>HTTP Keep-Alive <br />
Keep-Alive功能使客户端到服务器端的连接持续有效，当出现对服务器的后继请求时，Keep-Alive功能避免了建立或者重新建立连接。市场上的大部分Web服务器，包括iPlanet、IIS和Apache，都支持HTTP Keep-Alive。对于提供静态内容的网站来说，这个功能通常很有用。但是，对于负担较重的网站来说，这里存在另外一个问题：虽然为客户保留打开的连接有一定的好处，但它同样影响了性能，因为在处理暂停期间，本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时，Keep-Alive功能对资源利用的影响尤其突出。</p>
<p>为什么有些apache服务器，负载很高，把Keep-Alive关掉负载就减轻了呢？ <br />
apache 有两种工作模式，prefork和worker。apache 1.x只有，prefork。 <br />
prefork比较典型，就是个进程池，每次创建一批进程,还有apache是基于select实现的。在用户不是太多的时候，长连接还是很有用的，可以节约分组，提升响应速度，但是一旦超出某个平衡点，由于为了保持很多长连接，创建了太多的进程，导致系统不堪重负，内存不够了，开始换入换出，cpu也被很多进程吃光了,load上去了。这种情况下，对apache来说，每次请求重新建立连接要比保持这么多长连接和进程更划算。 </p>
<p>-------------------------------------------------------- </p>
<p>KeepAliveTime 值控制 TCP/IP 尝试验证空闲连接是否完好的频率。如果这段时间内没有活动，则会发送保持活动信号。如果网络工作正常，而且接收方是活动的，它就会响应。如果需要对丢失接收方敏感，换句话说，需要更快地发现丢失了接收方，请考虑减小这个值。如果长期不活动的空闲连接出现次数较多，而丢失接收方的情况出现较少，您可能会要提高该值以减少开销。缺省情况下，如果空闲连接 7200000 毫秒（2 小时）内没有活动，Windows 就发送保持活动的消息。通常，1800000 毫秒是首选值，从而一半的已关闭连接会在 30 分钟内被检测到。 KeepAliveInterval 值定义了如果未从接收方收到保持活动消息的响应，TCP/IP 重复发送保持活动信号的频率。当连续发送保持活动信号、但未收到响应的次数超出 TcpMaxDataRetransmissions 的值时，会放弃该连接。如果期望较长的响应时间，您可能需要提高该值以减少开销。如果需要减少花在验证接收方是否已丢失上的时间，请考虑减小该值或 TcpMaxDataRetransmissions 值。缺省情况下，在未收到响应而重新发送保持活动的消息之前，Windows 会等待 1000 毫秒（1 秒）。 KeepAliveTime 根据你的需要设置就行，比如10分钟，注意要转换成MS。 XXX代表这个间隔值得大小。</p>
<img src ="http://www.blogjava.net/cenly60/aggbug/282135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cenly60/" target="_blank">60</a> 2009-06-14 12:23 <a href="http://www.blogjava.net/cenly60/archive/2009/06/14/282135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>