之前有个开发遇到个生产问题,开发发现有时候CS之间的心跳直接丢了,查看日志发现客户端一直没收到心跳报文,但服务端其实已经把报文发了,觉得很奇怪,TCP 是可靠链接,不可能丢了吧,最终是发现了netstat 里的recv-q 有积压导致的,问题虽然解决了,但还是需要复盘一下,看看细节。
先看下啥是Recv-Q 和 Send-Q

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.
单位是字节,是表示远程主机还没有ack的数据包的大小。

这2个Q本质上操作的数据其实是socket 上的缓存数据以及用户进程的缓存数据,对应的分别是recv() 和 send() 方法, 之后的发送接收都是纯TCP来操作的,和socket关系了,所以一般发现recv-q 阻塞了,其实和tcp关系已经不大了,因为tcp的可靠性

故障发散-Recv-Q阻塞相关推荐

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

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

  2. recv send 阻塞和非阻塞

    int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据 ...

  3. 利用计算机诊断ct故障,皮克I/Q CT计算机电源故障修理

    摘要: 皮克 I/Q CT机在我国从 92年开始引进使用,现在使用的医院较多,该机塔式计算机部分采用 110V电源供电,计算机很少出现故障,电源部分可靠性很高.该机使用 4- 5年之后,发生显示器图像 ...

  4. python socket recv非阻塞_socket非阻塞recv大坑

    Python中,socket用来实现网络通信,它默认的recv是一个阻塞的函数,也就是说,当运行到recv时,会在这个位置一直等待直到有数据传输过来,我在网上一篇文章看到: Sunmmary Pyth ...

  5. linux 清空进程recv q,Linux中ss命令Recv-Q和Send-Q详解

    ss 用来显示处于活动状态的套接字信息.ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比nets ...

  6. send/recv阻塞和非租塞不同

    [send]在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送就返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向 ...

  7. 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值

    recv: 阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小, 特别:非阻塞模式下返回 值 <0时并且(errno == EINTR || e ...

  8. recv 和 send 阻塞和非阻塞的区别

    目录 答案 深入说明 在 epoll 中的应用 总结 拓展 答案 阻塞,事情干不完就不要回来了! 非阻塞,能干多少就是多少,赶紧回来! 深入说明 // 将内核接收缓冲区中的数据 copy 到应用层中用 ...

  9. recv函数返回值说明

    recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. ...

最新文章

  1. DEDECMS后台上传banner图控制图片轮播
  2. 《Scala By Examples》第6章 类和对象
  3. 桌面制作——Wallpaper Engine+Rainmeter
  4. php曲线,PHP生成曲线图的函数
  5. alter与alert区别
  6. linux分享二:Linux如何修改字符集
  7. 构建Docker镜像仓库的另一选择:Nexus3 - DockOne.io
  8. 拓端tecdat|R语言使用倾向评分提高RCT(随机对照试验)的效率
  9. vb.net同步服务器文件,vb.net - VB.NET - 如何以编程方式将身份验证传递给服务器 - 如何访问需要身份验证的服务器上的文件 - 堆栈内存溢出...
  10. 一键把动态IP自动设置为静态IP
  11. Bartender模板三种动态图片设置方法(仅供参考)
  12. JVM探秘:垃圾收集器
  13. 计算机启动时为啥总要检测硬盘,每次开机都磁盘检查怎么办_如何关闭硬盘开机自检-win7之家...
  14. 华为2018实习面试+状态总结
  15. 基于Predictive Parsing的ABNF语法分析器(十二)——alternation、concatenation、group和option
  16. 自学神经网络要多久,神经网络要训练多久
  17. 美国GeneSiC推出目前世界最高等级6.5kV/300mΩ SiC MOSFET产品
  18. 录音文件下载_VAA云录音(系统)-VAA云录音下载安装v1.1.9
  19. ADG-12A-02-D2-1-52不带位置反馈比例换向阀放大器
  20. 多人开发SVN版本控制工具安装

热门文章

  1. ERP出库审核业务(四十四)
  2. PJSIP编译与使用说明
  3. 2.uCOSIII任务管理
  4. unity弹幕功能实现
  5. 培养气质的98个好习惯
  6. Python字符串及运算
  7. 计算机英语教案模板,小学英语教案模板三篇
  8. 常用的RAID模式及特点
  9. 亚马逊云服务器使用密码登录
  10. 利用poi 1.6 通过模板导出复杂 Word表格,包含合单元格后垂直居中、循环生成行等