TCP/IP(七)TCP的连接管理(四)全连接

一  连接队列

 nginx listen 参数backlog的意义    nginx配置文件中listen后面的backlog配置

①  TCP全连接队列概念

全连接队列: 也称 'accept' 队列

②  查看应用程序的 TCP 全连接队列大小

实验1:  ss 命令查看 'LISTEN状态'下 'Recv-Q/Send-Q' 含义

附加:   8080端口是'nginx'监听的

备注:   全连接队列一般'所处'在服务端

补充:   Recv-Q  接收队列,'一般为0',如果'不是0',表示队列'正在堆积'

 TCP/IP(七)TCP的连接管理(四)全连接_第1张图片

实验2:  ss 命令查看 '非 LISTEN状态'下 'Recv-Q/Send-Q' 含义

强调:   ss 命令加不加'l'参数,'Recv-Q/Send-Q' 含义'不同'

补充: netstat 命令的 'l'参数同上

-p:  显示'进程名/程序名'

TCP/IP(七)TCP的连接管理(四)全连接_第2张图片

③  ab 模拟 TCP 全连接队列溢出

1、'ab' 简介

TCP/IP(七)TCP的连接管理(四)全连接_第3张图片

2、客户端执行 'ab' 命令对服务端发起'压力'测试

场景:有时设置'并发参数较大'时,'10000+'执行命令时会报如下'错误'

TCP/IP(七)TCP的连接管理(四)全连接_第4张图片

apr_socket_recv: Connection reset by peer (104)报错      ab -r 参数也可以解决报错

TCP/IP(七)TCP的连接管理(四)全连接_第5张图片

3、压测'结果'

备注: 关于'ss'的观察结果这里不再赘述,我们在'wrk'测试中观察

TCP/IP(七)TCP的连接管理(四)全连接_第6张图片

④  wrk模拟 TCP 全连接队列溢出

TCP/IP(七)TCP的连接管理(四)全连接_第7张图片

模拟测试中'环境'内核参数:

  1、somaxconn 是默认值 128

  2、nginx 的 backlog 是默认值 511

wrk安装和使用

TCP/IP(七)TCP的连接管理(四)全连接_第8张图片

1、客户端执行 'wrk' 命令对服务端发起'压力测试',并发 '3 万' 个连接

wrk -t 6 -c 30000 -d 60s http://192.168.3.200:8088

TCP/IP(七)TCP的连接管理(四)全连接_第9张图片

2、在'服务端'可以使用 'ss' 命令,来查看当前 TCP '全连接队列'的情况

建议: watch -n1 "ss -lnt| grep 8088" 实时观察

TCP/IP(七)TCP的连接管理(四)全连接_第10张图片

3、查看 'TCP 最大全连接队列' 溢出情况

watch -n1 'netstat -s | grep overflowed'

TCP/IP(七)TCP的连接管理(四)全连接_第11张图片

⑤  linux中 TCP全连接队列满了使用什么策略来回应客户端

内核参数: /proc/sys/net/ipv4/tcp_abort_on_overflow

备注: 默认就是'0',直接'drop'丢弃

补充: 置为'1'会在'全连接队列'满了的场景,服务端触发'RST'

TCP/IP(七)TCP的连接管理(四)全连接_第12张图片

排查: 户端'连接不上'服务端,'是不是'服务端 TCP 全连接队列满的'原因'?

tcp_abort_on_overflow 1 --> 'connection reset by peer' --> '全连接队列溢出'

TCP/IP(七)TCP的连接管理(四)全连接_第13张图片

⑥  如何增大 TCP 全连接队

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

细节:同一操作系统somaxconn在'物理机'和'虚拟机'默认值'不一样'

注意:这里'somaxconn'和'backlog'的具体含义

TCP/IP(七)TCP的连接管理(四)全连接_第14张图片

TCP/IP(七)TCP的连接管理(四)全连接_第15张图片

案例: 增加nginx中'全连接队列'的最大值

1、'默认'的初始状态

TCP/IP(七)TCP的连接管理(四)全连接_第16张图片

2、增加'net.core.somaxconn'内核参数值

TCP/IP(七)TCP的连接管理(四)全连接_第17张图片

3、同时增加 nginx 'listen 指令的' backlog 参数,也同样设置成 '5000'

TCP/IP(七)TCP的连接管理(四)全连接_第18张图片

4、重启完后 nginx 服务后,'服务端执行 ss 命令',观察 TCP '全连接队列'大小

TCP/IP(七)TCP的连接管理(四)全连接_第19张图片

5、继续'探究' --> 增大 TCP 全连接队列为'5000'后,继续'压测'

说明: 客户端同样以 '3 万个连接' 并发发送请求给服务端

TCP/IP(七)TCP的连接管理(四)全连接_第20张图片

6、对'上述结果'分析

重点: 查看'TCP全连接队列'是否溢出

TCP/IP(七)TCP的连接管理(四)全连接_第21张图片

⑦  TCP连接失败排查

TCP/IP(七)TCP的连接管理(四)全连接_第22张图片

netstat -s TCP连接失败 相关统计 解释

netstat -s 输出解释

你可能感兴趣的:(TCP/IP,netstat,-s)