码迷,mamicode.com
首页 > 系统相关 > 详细

[TimLinux] TCP全连接队列满

时间:2018-07-16 20:01:57      阅读:1202      评论:0      收藏:0      [点我收藏+]

标签:cat   syn   文件   serve   intern   add   trie   ref   lis   

0. TCP三次握手

该图来自:TCP SOCKET中backlog参数的用途是什么?

 技术分享图片

syns queue: 半连接队列

accept queue: 全连接队列

控制参数存放在文件:/proc/sys/net/ipv4/tcp_abort_on_overflow中,0:表示如果三次握手第三步的时候全连接队列满了,那么server扔掉client发过来的ack(在server端因为全连接队列满了,认为连接还没有建立起来),1:表示第三步的时候如果全连接队列满了,server发送一个reset包给client,表示废掉这个握手过程和这个连接(client端会抛出异常:connection reset by peer的错误)

如果全连接队列满了并且tcp_abort_on_overflow=0的话,server过一段时间再次发送syn+ack给client(也就是重试),重试的次数在net.ipv4.tcp_synack_retries参数中配置:sysctl -a 可以查看当前的配置。

 

1. 查看全连接队列

$ netstat -s | egrep ‘listen|LISTEN‘

667399 times the listen queue of a socket overflowed ==> 全连接队列满了 66739 次

$ ss -lnt   ==> 50: 表示监听的端口上全连接队列最大为50,第一列Recv-Q表示当前使用了多少

State      Recv-Q      Send-Q     local Address:Port          Peer Address:Port

LISTEN   0                50             :3306                             *:*

 

全连接队列的最大值 = min(backlog, somaxconn)

backlog: 是在socket创建的时候传入的,somaxconn:是一个os级别的系统参数(cat /proc/sys/net/core/somaxconn)

2. 查看半连接队列

半连接队列的大小取决于:max(64, /proc/sys/net/ivp4/tcp_max_syn_backlog),不同的OS会有差异

$ netstat -tn 

Active  Internet connections (w/o servers)

Proto  Recv-Q  Send-Q  Local Address  Foreign Address State

tcp0  0       server:8182 client-1:15260  SYNC_RECV

tcp0  28    server:22        client-1:51708  ESTABLISHED

tcp0  0     server:2376  client-1:60269  ESTABLISHED

这个命令显示的Recv-Q、Send-Q与全连接、半连接没有关系!

 

$ ab -n 10000 -c 300 http://172.16.218.128/3.php (ab: apache benchmark性能测试命令)

 

[TimLinux] TCP全连接队列满

标签:cat   syn   文件   serve   intern   add   trie   ref   lis   

原文地址:https://www.cnblogs.com/timlinux/p/9319762.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!