zoukankan      html  css  js  c++  java
  • 网络-线上问题排查

    一、三次握手环节比较关注的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

  • 相关阅读:
    properties to json (通过前缀手动创建json, bean) propsutils
    Drill 常用时间函数 drill
    ubuntu20.04 修改 DNS  ip
    javascript 获取图片的尺寸 how to get image size using javascript
    javascript小数点后保留N位并可以四舍五入
    C# 递归算法求 1,1,2,3,5,8,13···
    自加入屠龙后的成长记
    Session丢值的问题
    第二个网站成长经历,http://www.chaomagou.com/ 潮妈购
    回想自己2012年1月1日到2012年6月19日的所作所为
  • 原文地址:https://www.cnblogs.com/Joy-Hu/p/13384783.html
Copyright © 2011-2022 走看看