• 网络-线上问题排查


    一、三次握手环节比较关注的SYN_RCVD和ESTABLISHED
    1、SYN_RCVD的半连接队列 max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog)
    cat /proc/sys/net/ipv4/tcp_max_syn_backlog
    cat /etc/sysctl.conf
    2、ESTABLISHED的全连接队列
    全连接队列大小等于 min(backlog, /proc/sys/net/core/somaxconn) . backlog是在socket创建的时候传入的,somaxconn是os的一个参数
    cat /proc/sys/net/core/somaxconn

    如果全连接队列满了,那么客户端继续向服务端发送ACK,服务端的处理方式和系统参数tcp_abort_on_overflow有关,
    Linux环境下可以通过执行"cat /proc/sys/net/ipv4/tcp_abort_on_overflow"来查看此参数
    0表示字节丢弃该ACK 1表示发送一个RST给客户端,直接废掉这个握手过程与连接


    3、通过ss查看Socket统计状态
    ss -lnt 查看处于LISTEN状态的TCP套接字

    4、队列溢出
    ss -s 查看队列的溢出统计数据
    backlog设置比较小的时候导致的溢出,这种情况从机器负载的监控或者观察中很难看出来.如果其他方面没有问题而吞吐一直上不去则可以使用如下命令查看是否是队列溢出了
    date;netstat -s | egrep "listen|LISTEN"
    短时间内溢出的数量有比较大的增长的情况下 , 调大backlog的值可以提升吞吐

    二、四次挥手中, 比较关心的是TIME_WAIT状态
    这个状态在高并发短连接的场景上也比较容易出问题. 原因是在于与客户端通信完成后,服务器端主动关闭连接 , TIME_WAIT状态要在2MSL的时间后才能转变成CLOSED状态,此时端口才能被回收.
    而网络端口范围在0~65535的范围 . 高并发下 业务处理+传输数据的时间 远远小于 TIME_WAIT超时的时间,端口很快就会被消耗完.从这个角度看长连接可以比较少考虑这个状态的问题

    netstat -nat|grep TIME_WAIT|awk '{print $4}'|sort|uniq -c|sort -nr|head -3

  • 相关阅读:
    动态绑定表格
    双缓冲设置控件
    编写模块化插件式应用程序
    网上收集整理SharePoint的母版页master占位符(改动不大)
    改变SharePoint工作流任务的界面
    SharePoint定时器作业部署步骤
    定时器作业将sap数据更新至列表库
    网络没问题,MSN登录不了解决方法
    以后就搬家到cnblogs吧。
    记录我的第一个OpenGL程序
  • 原文地址:https://www.cnblogs.com/Joy-Hu/p/13384783.html
Copyright © 2020-2023  润新知