注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

backlog queue限制导致tcp连接建立失败相关的几篇文章  

2014-08-13 22:32:28|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
关键字
======
backlog queue,SYN_SENT, SYN_RECV


1. linux tcp连接的backlog的值的查看
==================================

ss 命令获取到的 Recv-Q/Send-Q 在 LISTEN 状态以及非 LISTEN 状态所表达的含义是不同的。从 tcp_diag.c 源码中可以看到二者的区别:

LISTEN 状态: Recv-Q 表示的当前等待服务端调用 accept 完成三次握手的 listen backlog 数值,也就是说,当客户端通过 connect() 去连接正在 listen() 的服务端时,

这些连接会一直处于这个 queue 里面直到被服务端 accept();Send-Q 表示的则是最大的 listen backlog 数值,这就就是上面提到的 min(backlog, somaxconn) 的值。
其余状态: 非 LISTEN 状态之前理解的没有问题。Recv-Q 表示 receive queue 中的 bytes 数量;Send-Q 表示 send queue 中的 bytes 数值。



2. backlog导致连接建立不成功的症状
==================================
client 建立连接时发送SYN包server端,server收到之后如果backlog队列已满,直接丢弃不回ack。
然后client端过3秒、9秒...的间隔时候不断重发syn包。
根据linux服务器配置,server端在队列已满的情况下,(1)有可能直接丢包  (2) server可能随机client的某个重传的syn的回复syn/ack,然后client端connect返回成功

,但client发数据到server还是被丢弃,client又有要重传数据。因为server端应用这时还没有accept这个连接。(3) 根据配

置/proc/sys/net/ipv4/tcp_abort_on_overflow,linux 的server端也可以在队列已满的时候直接回复reset通知client端关闭这个连接。


netstat -s  查看可以看到以下丢包信息
38409 times the listen queue of a socket overflowed
38409 SYNs to LISTEN sockets dropped


3.相关内核源码,
===============
netipv4tcp_ipv4.c
tcp_v4_conn_request
net_csk_reqsk_queue_is_full



参考文章
========

1.
TCP queue 的一些问题
http://jaseywang.me/2014/07/20/tcp-queue-%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98/
部分网络内核参数说明
http://jaseywang.me/2012/02/18/%E9%83%A8%E5%88%86%E7%BD%91%E7%BB%9C%E5%86%85%E6%A0%B8%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E/

2.
Linux协议栈accept和syn队列问题 
http://blog.chinaunix.net/uid-20662820-id-4154399.html


3. 
关于tcp listen queue的一点事
http://www.douban.com/note/178129553/


4. 
linux诡异的半连接(SYN_RECV)队列长度(一)
http://www.piao2010.com/linux%E8%AF%A1%E5%BC%82%E7%9A%84%E5%8D%8A%E8%BF%9E%E6%8E%A5syn_recv%E9%98%9F%E5%88%97%E9%95%BF%E5%BA%A6%E4%B8%80
linux诡异的半连接(SYN_RECV)队列长度(二)
http://www.piao2010.com/linux%E8%AF%A1%E5%BC%82%E7%9A%84%E5%8D%8A%E8%BF%9E%E6%8E%A5syn_recv%E9%98%9F%E5%88%97%E9%95%BF%E5%BA%A6%E4%BA%8C

5.
MySQL Connection Timeouts
http://www.mysqlperformanceblog.com/2011/04/19/mysql-connection-timeouts/

6.
Part 1: Lessons learned tuning TCP and Nginx in EC2
http://engineering.chartbeat.com/2014/01/02/part-1-lessons-learned-tuning-tcp-and-nginx-in-ec2/
Part 2: Lessons learned tuning TCP and Nginx in EC2
http://engineering.chartbeat.com/2014/02/12/part-2-lessons-learned-tuning-tcp-and-nginx-in-ec2/



  评论这张
 
阅读(809)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017