先看看文档,man netstat中有Recv-Q和Send-Q的含义;man ss中没有Recv-Q和Send-Q的含义

https://man7.org/linux/man-pages/man8/netstat.8.html

https://man7.org/linux/man-pages/man8/ss.8.html

man netstat是这么说的

Recv-Q
       Established: The count of bytes not copied by the user program connected to this socket.
       Listening: Since Kernel 2.6.18 this column contains the current syn backlog.

Send-Q
       Established: The count of bytes not acknowledged by the remote host.
       Listening: Since Kernel 2.6.18 this column contains the maximum size of the syn backlog.

先说我的结论

一:Established时

netstat和ss 都

Recv-Q:“OS持有的,尚未交付给应用的 数据的 字节数”

Send-Q:“已经发送给对端应用,但,对端应用尚未ack的 字节数。此时,这些数据依然要由OS持有”

二:Listen时

ss的Recv-Q:“已建立成功(状态为ESTABLISHED),但,尚未交付给应用的” tcp连接的数量。

该值最大为:Send-Q+1,即:min(backlog, somaxconn)+1。

之所以加1,是因为OS内核在判断队列是否已满时,用的是>(应该用>=),这导致当已创建成功的连接数量正好等于min(backlog, somaxconn)时,还会再多创建一个tcp连接,最终结果就是:min(backlog, somaxconn)+1

见:https://segmentfault.com/a/1190000019252960

ss的Send-Q:listen时,backlog的大小。其值为min(backlog, somaxconn)

netstat的Recv-Q :含义同ss的Recv-Q

netstat的Send-Q: 尽管文档中说是"Since Kernel 2.6.18 this column contains the maximum size of the syn backlog",但,实验中看不出来

我们做下面实验验证下。使用的条件如下

  1. uname -a
    Linux vm204 5.4.0-47-generic #51~18.04.1-Ubuntu SMP Sat Sep 5 14:35:50 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  2. http接口直接sleep 3600s
  3. tomcat只有1个处理线程
  4. tomcat的acceptCount==5
  5. tomcat的maxConnections==7
  6. 利用JMeter,发送9个请求
    @RequestMapping("/greeting")public @ResponseBodyString greeting(HttpServletResponse rsp, @RequestParam(name = "cost") long cost) {try {Thread.sleep(cost * 1000L);} catch (Exception e) {e.printStackTrace();}String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());LOG.info(format);return format;}

此时,看到的情况


最大连接数量为:

maxConnections + ( min(acceptCount, somaxconn) + 1 ) == 7 + ( min(5, 4096) + 1 ) == 7+ ( 5+1 ) == 13

即:从上图可以看到:

我们只要求建立 9 个连接(JMeter使用9个线程做请求),由于maxConnections==7,于是tomcat只能收到 7 个连接

  1. 还有9-7==2个连接,已经创建成功但由OS代为持有,所以:netstat和ss 的Recv-Q都显示2
  2. tomcat的backlog为5(即:acceptCount为5),所以:ss 的Send-Q显示5(netstat的Send-Q,实验不出来)

OK,上面是Listen状态时,Recv-Q和Send-Q的含义

Established状态时的实验见这里:netstat输出中Established时Recv-Q

netstat 和 ss中,Recv-Q和Send-Q的含义相关推荐

  1. Linux指令--traceroute,netstat,ss

    通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一 ...

  2. 【每天一个 Linux 命令】网络相关命令(ifconfig、route、ping、traceroute、netstat、ss、telnet、rcp、scp)

    文章目录 ifconfig命令 ifconfig命令使用示例 route命令语法 route命令使用示例 ping命令语法 ping命令使用示例 traceroute命令语法 traceroute命令 ...

  3. 二十、网络ifconfig 、ip 、netstat、ss之二

    ip 网络层协议 ip地址 点分十进制分为4段,范围 0-255 ip分类 A 占据1段,最左侧一段第一位固定为0 0 000 0000 - 0 111 1111  0 - 127:其中0为网络,12 ...

  4. TCP中recv解阻塞的两种方式

    TCP中recv解阻塞的两种方式 1.收到客户端发送的数据 2.客户端关闭了套接字,可以通过判断收到数据的长度来判断客户端是否下线,长度为0代表已下线. send操作 1.在阻塞模式下send操作将会 ...

  5. Linux 网络设置(ifconfig、route、traceroute、netstat、ss、nslookup、dig、ping状态返回分析)

    Linux 网络设置 一.查看网络 1.查看网络接口地址 2.查看更改主机名 3.查看路由表条目 4.查看网络连接情况 netstat 命令 ss 命令 二.测试网络连接 1.测试网络连通性 2.跟踪 ...

  6. 网络工具netstat与ss

    建议使用ss命令,2001年的时候netstat 1.42版本之后就没更新了,之后取代的工具是ss.netstat命令在很多场景下比较慢.ss可以显示跟netstat类似的信息,但是速度却比netst ...

  7. 监控与性能分析系列:2)netstat、ss对比使用

    从下面这个图来看,netstat和ss都是网络相关的监控,netstat在协议栈中每一层都可以做监控统计:TCP.路由表.网络接口.协议等,但是在Linux中,netstat已经不为推荐,取而代之的是 ...

  8. Qt中的d指针和q指针

    概述 如果程序从一个以前版本的库动态链接到新版本的库之后,能够继续正常运行,而不需要重新编译,那么我们就说这个库是二进制兼容的. 如果一个程序需要重新编译来运行一个新版本的库,但是不需要对程序的源代码 ...

  9. 在Linux中检索英语单词——字母q总是与u在一起吗?

    在Linux中检索英语单词--字母q总是与u在一起吗? 文章目录 在Linux中检索英语单词--字母q总是与u在一起吗? 一.前言 二.操作步骤 1.思路 2.工具 字典 指令 3.操作 三.结语 一 ...

最新文章

  1. 【转载】让我们来FirePHP
  2. Thrift在Windows及Linux平台下的安装和使用示例
  3. centos6.8下安装破解quartus prime16.0以及modelsim ae安装
  4. socket网络编程——网络编程接口
  5. 新天龙八部服务器维护了吗,《新天龙八部》3月11日全服更新维护公告
  6. 批量修改数据_#泰Q头条#065期 四步搞定Excel表中的批量数据修改
  7. Pytest之fixture
  8. 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题
  9. 很幽默的讲解六种Socket I/O模型C++程序设计
  10. 程序员基础(自学)适合入门,大一
  11. Java多线程编程之Active Object模式
  12. 微信小程序-区分版本:开发版、体验版和正式版
  13. 如何将文件夹打成jar包
  14. TypeScript学习日记
  15. 一篇文章“简单”认识《生成对抗网络》(GAN)
  16. 【重识云原生】第六章容器基础6.4.10.4节——StatefulSet实操案例-使用 StatefulSet 部署Cassandra
  17. Qt ApplicationAttribute/WidgetAttribute 程序级别属性
  18. android编程xml动画,Android中xml设置Animation动画效果详解
  19. 区块链改革(链改)全国行动委员会第一次会议胜利召开
  20. 思考是勤奋的一部分,人最大的懒惰是思想懒惰

热门文章

  1. 【bosun】查询表达式
  2. 什么是Python?Python有什么特性?
  3. 从双11看阿里云安全的“创世纪”:采访阿里云安全掌门人肖力有感
  4. 安装VS2019报错
  5. 推挽输出、漏极输出方式详解
  6. python web 全栈开发_Python全栈开发:web框架
  7. 基于neo4j知识图谱的智能问答系统
  8. AI之路(二)——关于统计学习(statistical learning)Part 1 概论
  9. Epic安装新Epic Online Services内部模块报错EOS-ERR-1603解决
  10. 在chrome浏览器中安装vue-devtools