设为首页 收藏本站
查看: 859|回复: 0

[经验分享] Apache 的 KeepAlive 和 TCP/IP 的 TIME_WAIT

[复制链接]

尚未签到

发表于 2018-11-28 11:57:06 | 显示全部楼层 |阅读模式
  转载自:扶凯[http://www.php-oa.com]  本文链接: http://www.php-oa.com/2008/04/25/apachedekeepalivehetcpipdetime_wait.html
  今天检查了一下基本一台服务器,发现TIME_WAIT高到3k多.TIME_WAIT本身并不会占用很大资源的,除非受到***.但太多服务器还是有可能挂掉.
  TIME_WAIT 3699
  CLOSE_WAIT 52
  FIN_WAIT1 32
  SYN_SENT 1
  FIN_WAIT2 2
  ESTABLISHED 17
  SYN_RECV 45
  CLOSING 6
  根据《TCP/IP详解》中的TCP的建立和终止中有关"TCP的终止"的讲解
  TCP的终止通过双方的四次握手实现。发起终止的一方执行主动关闭,响应的另一方执行被动关闭。
  1. 发起方更改状态为FIN_WAIT_1,关闭应用程序进程,发出一个TCP的FIN段;
  2. 接收方收到FIN段,返回一个带确认序号的ACK,同时向自己对应的进程发送一个文件结束符EOF,同时更改状态为CLOSE_WAIT,发起方接到ACK后状态更改为FIN_WAIT_2;
  3. 接收方关闭应用程序进程,更改状态为LAST_ACK,并向对方发出一个TCP的FIN段;
  4. 发起方接到FIN后状态更改为TIME_WAIT,并发出这个FIN的ACK确认。ACK发送成功后(2MSL内)双方TCP状态变为CLOSED。
  我们不难看出上面的显示的结果的意思。根据TCP协议,主动发起关闭的一方,会进入TIME_WAIT状态(TCP实现必须可靠地终止连接的两个方向(全双工关闭)),持续2*MSL(Max Segment Lifetime),缺省为240秒.
  为什么 TIME_WAIT 状态需要保持 2MSL 这么长的时间?
  TIME_WAIT的等待时间为2MSL,即最大段生存时间.如果 TIME_WAIT 状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。第二个拥有相同相关五元组的连接出现(因为连接终止前发起的一方可能需要重发 ACK,所以停留在该状态的时间必须为MSL的2倍。),而第一个连接的重复报文到达,干扰了第二个连接。TCP实现必须防止某个连接的重复报文在连接终 止后出现,所以让TIME_WAIT态保持时间足够长(2MSL),连接相应方向上的TCP报文要么完全响应完毕,要么被丢弃。建立第二个连接的时候,不 会混淆。
  注:MSL(最大分段生存期)指明TCP报文在Internet上最长生存时间,每个具体的TCP实现都必须选择一个确定的MSL值。RFC 1122建议是2分钟,但BSD传统实现采用了30秒。TIME_WAIT 状态最大保持时间是2 * MSL,也就是1-4分钟。
  对apache的操作
  HTTP协议1.1版规定default行为是Keep-Alive,也就是会重用TCP连接传输多个request/response.所以我打开 http中的keepalive On,发现TIME_WAIT就立刻少了下来.只有300的样子.总结一下.我认为有二个原因.
  1.keepalive没有开,导致每次请求都要建立新的tcp连接,请求完成以后关闭,增加了很多time_wait的状态,没有重 用,KeepAlive我认为它指的是保持连接活跃,类似于Mysql的永久连接。如果将KeepAlive设置为On,那么来自同一客户端的请求就不需 要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。
  2.然后keepalive在系统中本身的值很高.默认空闲连接 7200 秒(2 小时)内没有活动.才会断开.
  我们开启KeepAlive
  KeepAlive On
  MaxKeepAliveRequests 120
  KeepAliveTimeout 15
  这样每个连接可以发送100次请求,超时时间为15秒(如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接)。
  有关内核级别的keepalive和time_wait的优化调整
  vi /etc/sysctl
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_tw_recycle = 1
  net.ipv4.tcp_keepalive_time = 1800
  net.ipv4.tcp_fin_timeout = 30
  net.core.netdev_max_backlog =8096
  修改完记的使用sysctl -p 让它生效
  以上参数的注解
  /proc/sys/net/ipv4/tcp_tw_reuse
  该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。
  /proc/sys/net/ipv4/tcp_tw_recycle
  recyse是加速TIME-WAIT sockets回收
  对tcp_tw_reuse和tcp_tw_recycle的修改,可能会出现.warning, got duplicate tcp line warning, got BOGUS tcp line.上面这二个参数指的是存在这两个完全一样的TCP连接,这会发生在一个连接被迅速的断开并且重新连接的情况,而且使用的端口和地址相同。但基本 上这样的事情不会发生,无论如何,使能上述设置会增加重现机会。这个提示不会有人和危害,而且也不会降低系统性能,目前正在进行工作
  /proc/sys/net/ipv4/tcp_keepalive_time
  表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时
  /proc/sys/net/ipv4/tcp_fin_timeout   最佳值和BSD一样为30
  fin_wait1状态是在发起端主动要求关闭tcp连接,并且主动发送fin以后,等待接收端回复ack时候的状态。对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。
  /proc/sys/net/core/netdev_max_backlog
  该文件指定了,在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
  tcp状态
  LISTEN:侦听来自远方的TCP端口 的连接请求
  SYN-SENT:再发送连接请求后等待匹配的连接请求
  SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接 请求的确认
  ESTABLISHED:代表一个打开的连接
  FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
  FIN- WAIT-2:从远程TCP等待连接中断请求
  CLOSE-WAIT:等待从本地用户发来的连接中断请求
  CLOSING:等待远程TCP对 连接中断的确认
  LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
  TIME-WAIT:等待足够的时间以确保远程TCP接 收到连接中断请求的确认
  CLOSED:没有任何连接状态


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-640713-1-1.html 上篇帖子: windows下的apache限制IP连接数 下篇帖子: Apache Common-Lang HashCodeBuilder及EqualsBuilder分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表