• Linux下Too Many Open Files故障处理


    今天有个linux服务器一直报Too Many Open Files的异常,导致系统进行网络请求失败,重启应用容器之后恢复正常。

    找到了当时的服务器连接监控,发现close_wait状态的连接一直在升高,上升到了10k后就引起应用报错了。因为我们设置的linux的最大的连接数为10240。

    在博客园逛了一下,找到了下面的描述

    如果我们的服务器TCP连接处于CLOSE_WAIT状态的话,那说明套接字是被动关闭的!
    因为如果是CLIENT端主动断掉当前连接的话,那么双方关闭这个TCP连接共需要四个packet:
    Client ---> FIN ---> Server
    Client <--- ACK <--- Server

    这时候Client端处于FIN_WAIT_2状态;而Server 程序处于CLOSE_WAIT状态。
    Client <--- FIN <--- Server

    Server发送FIN给Client,Server 就置为LAST_ACK状态。
    Client ---> ACK ---> Server(这步没做)

    Client回应了ACK,那么Server 的套接字才会真正置为CLOSED状态。

    Server 程序处于CLOSE_WAIT状态,而不是LAST_ACK状态,说明还没有发FIN给Client,那么可能是在关闭连接之前还有许多数据要发送或者其他事要做,导致没有发这个FIN packet。
    通常来说,一个CLOSE_WAIT会维持至少2个小时的时间。

    了解到这个情况之后,可以定位到应用之所以出现这么多的close_wait的状态,是因为一直在接收合作方发送过来的通知,是有个合作方在发送通知后没有将ACK响应给我们,造成了close_wait状态积压,超过系统设置的最大值而无法再建立连接。

    通过修改一下TCP/IP的参数,来缩短这个时间:修改tcp_keepalive_*系列参数有助于解决这个问题。

     

  • 相关阅读:
    用户身份与文件权限
    W3school——javascript笔记
    第十一章——常用的Web应用程序
    探究CBV视图
    Django objects.all()、objects.get()与objects.filter()之间的区别介绍
    RTX检索COM 类工厂出错
    Oracle存储过程实例
    Oracle返回数据集
    Oracle数据库创建表空间、创建表、授权
    JS传参出现乱码的种种分析
  • 原文地址:https://www.cnblogs.com/zhoukedou/p/3017903.html
Copyright © 2020-2023  润新知