关于tcp:如何判断TCP-socket-接收是否及时

3次阅读

共计 503 个字符,预计需要花费 2 分钟才能阅读完成。

服务中,如果一个 socket 来往的数据较多,可能存在接管不及时,buffer 满的状态,延时减少;

如何判断 buffer 状态

  • netstat -nt |grep -E '8101|Recv-Q' 后果中 Recv-Q 即为接收缓冲区以后字节数,如果继续的放弃不变,无奈归零,那么就会存在程序接管不及时的状况;
  • 当一个线程(1 个 CPU) 负责多个 socket.recv 时就会存在接管性能问题;
  • 程序中,倡议将 socket.recv 接管函数,独自应用一个线程,接管与业务解决异步进行

如何设置 socket 的 buffer 大小

  • socket.setsockopt(xx,xx)

socket 的默认大小

  • linux 零碎手册的默认值

    • cat /proc/sys/net/core/rmem_default
    • -cat /proc/sys/net/core/wmem_default
  • tcp socket 的默认配置

    • cat /proc/sys/net/ipv4/tcp_wmem
    • cat /proc/sys/net/ipv4/tcp_rmem
  • tcp 缓冲区的最大值配置

    • cat /proc/sys/net/core/rmem_max
    • 当设置的值超过,这个最大值,那么最终 = 2 倍的最大值
正文完
 0