V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhoudaiyu
V2EX  ›  Linux

Apache httpd 引发的丢包问题求解

  •  
  •   zhoudaiyu · 2021-04-03 10:49:00 +08:00 · 1708 次点击
    这是一个创建于 1364 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天巡检的时候看 apache 监控视图(open-falcon)发现某台 apache 的网卡流量和连接数从前天晚上突然降到非常低,没来得及保留现场赶紧重启 apache 后恢复。排查了该机器 CPU 内存都没什么问题,apache 日志并没有异常,内核日志无异常,后来看了看 TCP 的监控,发现出问题的时候,有很多 TCPLISTENOVERFLOW 的报错,查了一下可能和 Backlog 和 somaxconn 等参数有些关系,后来我查了一下这台机器的这些配置和其他机器有无差别,也没发现有啥问题。不知道大家有啥排查思路?

    4 条回复    2021-04-04 18:23:55 +08:00
    liuxu
        1
    liuxu  
       2021-04-04 17:18:57 +08:00   ❤️ 2
    TCPLISTENOVERFLOW 的问题在于 backlog 的队列满了没能及时消费掉,所以 tcp 协议栈会停止接收新连接(不返回任何 tcp 包,而是服务端过一会返回 syn ack 装傻告诉客户端没收到 ack,客户端会重发 ack 建立连接),引发这个问题在于为什么你的 apache 的 accept()没有快速消费掉 backlog 的队列

    你当时的情况应该是 ESTABLISHED 的连接是满的,只是新连接建立不起来

    流量非常低,是因为服务端重复返回 syn ack,装成没收到客户端的 ack,这会导致客户端根据间隔时间指数增加的方式重复发送 ack/psh ack 业务数据包,所以没有正常的入网流量,出网流量会根据你的业务情况,如果不是下载和推送数据类,由于 ESTABLISHED 的连接没能及时处理,也就没有什么出网数据包了,所以出网流量也会很低

    重启一下就能好的很难事后分析,自己看看你的业务逻辑和代码吧
    liuxu
        2
    liuxu  
       2021-04-04 17:37:41 +08:00   ❤️ 1
    其实没有业务场景的话我能假设一种情况,你前面有负载均衡 lb,后面 3 台服务器 abc,假设某种原因,ab 服务器当机几分钟后正常,导致 lb 将流量全部给了服务器 c,服务器 c 连接太多,当你重启 c 后,lb 有均分给 3 台服务器了,所以就出现了你这种情况
    zhoudaiyu
        3
    zhoudaiyu  
    OP
       2021-04-04 17:53:33 +08:00 via iPhone
    @liuxu 十分感谢!您的意思是可能是 lb 的问题? lb 是硬件的 lb,用了好几年了都挺稳的,不过也不排除
    liuxu
        4
    liuxu  
       2021-04-04 18:23:55 +08:00
    @zhoudaiyu 没有当时情况的具体分析,很难说是什么问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2053 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:35 · PVG 08:35 · LAX 16:35 · JFK 19:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.