zoukankan      html  css  js  c++  java
  • nginx 服务器出现大量CLOSE_WAIT 排查结果

    1、查阅资料,查下close_wait 状态的直接原因,期间可以再次熟悉下 tcp 三次握手,四次挥手协议的基础知识。
    2、通过查询资料,最终可以确定的是nginx本身问题,根据网上常推荐的两种方式分别调整系统和nginx本身的参数均无法解决此问题。
    1)系统层面(快速释放空闲的tcp连接)

    net.ipv4.tcp_keepalive_time=30
    net.ipv4.tcp_keepalive_probes=2
    net.ipv4.tcp_keepalive_intvl=2

    2)nginx(参数配置)

    tcp_nodelay on  

    3、查阅nginx本身配置,发现有引用lua脚本获取请求中的cookie id,并且相关脚本中使用了aws redis 服务,初步怀疑是redis请求延迟导致。同时也怀疑是nginx 版本bug导致,又是一通咕咕。
    4、后来其他同事提醒怀疑是lua脚本问题,负责管理nginx的同事注释掉对应lua脚本并进行排查,最终定位为获取cookie id 的lua 脚本导致——去掉脚本,重启nginx问题解决。

    function cookie_id()
                local cookie, err = ck:new()
                if not cookie then
                    return "-"
                end
                local fields, err = cookie:get("JSESSIONID")
                if not fields then
                    return "-"
                else
                    return fields
                end
    end

    总结:

    根据TCP 四次挥手协议可以判断:哪台服务器出现CLOSE_WAIT,就是哪台服务器上部署的应用程序有问题(不管是服务端还是客户端),无论是开源服务,还是自己开发的应用程序,在此基础上分析问题。一般为代码逻辑或访问外部资源问题导致。

  • 相关阅读:
    LeetCode: LRU Cache
    LeetCode: Reorder List
    LeetCode: Linked List Cycle I && II
    LeetCode: Word Break I && II
    LeetCode: Single Number I && II
    太坑了,mybatis注解一对多,id没了
    ajax请求参数的格式
    查询结果拼接
    id拼接保存到单个字段后作为表连接的查询条件
    seam的定时轮巡
  • 原文地址:https://www.cnblogs.com/husbandmen/p/10116285.html
Copyright © 2011-2022 走看看