之前面试 曾经被问到 CLOSE_WAIT 状态意味这什么(服务端收到FIN 包后 还没有close fd,存在fd 泄漏的风险)

问题现象
代理报错 too many open files, ulimit 设置为100W(/proc/pid/limits),使用ss 命令才几千,lsof 有很多 socket(不显示 ESTAB 等TCP 状态,仅显示 SOCK),查看进程 /proc/pid/fd/ 确实有100w (大量不显示状态的socket), 达到了ulimit 上限.

经过排查,代理由于请求hang 住, 没有close accept 的socket,出现了 fd 泄漏的问题,本地可以复现。
问题是:为什么ss 不显示这些tcp 的状态:CLOSE_WAIT

使用bcc 工具的 tcplife, tcpstates 工具(-L port)发现 连接居然从 CLOSE_WAIT =》 CLOSE 状态,且时间是15秒以后。

/usr/share/bcc/tools/tcpstates -L xxx
SKADDR           C-PID C-COMM     LADDR           LPORT RADDR           RPORT OLDSTATE    -> NEWSTATE    MS
ffff8801c5c5a340 2558058 curl       ::ffff:127.0.0.1 xxx  ::ffff:127.0.0.1 46124 ESTABLISHED -> CLOSE_WAIT  0.000
ffff8801c5c5a340 0     swapper/1  ::ffff:127.0.0.1 xxx  ::ffff:127.0.0.1 46124 CLOSE_WAIT  -> CLOSE       15004.867

既然应用层没有 close fd,那么肯定是内核干的事情了,在网上搜索了 TCP_KEEPALIVE 可以。

抓包:这里很明显 服务端发送了一个keep-alive 包,客户端RST ,内核回收连接。
tcpdump -nnvvv -A -s0 -i lo -w tcp.pacp

为什么是15秒呢? setKeepAlivePeriod default golang 自带 accept 会设置。如果fint_timeout(TIME_WAIT) 少于这个值,回收了fd,此时对收到的包进行rst了。

内核完成了连接清理,所以ss 已经看不到ESTAB 或者CLOSE_WAIT, 只剩下fd 目录下一堆 未 关闭的 socket 文件描述符

CLOSE_WAIT 和TCP_KEEPALIVE相关推荐

  1. CLOSE_WAIT

    目录 0.引用阅读 1.TCP状态转移图及TCP四次挥手的图 1.1 TCP状态转移图-摘抄自<TCP/IP详解卷1> 1.2 TCP四次挥手 2.CLOSE_WAIT产生的原因 3.解决 ...

  2. TCP端口状态说明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT

    一. 首先说下tcp端口的几种状态: 1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. 2.ESTABLISHED状态 ESTABLISHED的意思是建立连接.表示 ...

  3. 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT

    https://my.oschina.net/fdhay/blog/638631 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 2016-02-18 大房 大房说 本文是我将最 ...

  4. java项目close wait_服务器TIME_WAIT和CLOSE_WAIT详解和解决办法

    昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: 里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态. 在服务器的日常维护过程中,会经 ...

  5. 再谈应用环境下的TIME_WAIT和CLOSE_WAIT

    昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/article/details/6615051 里头的分析过程有 ...

  6. TIME_WAIT和CLOSE_WAIT状态

    下图了解各种状态: 如果服务器出现了异常,很大的可能是出现了以下两种情况: 服务器保持了大量的TIME_WAIT状态. 服务器保持了大量的CLOSE_WAIT状态. TIME_WAIT状态产生原因: ...

  7. CLOSE_WAIT状态的原因与解决方法 --转

    转自:http://blog.chinaunix.net/uid-20357359-id-1963662.html 这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司 ...

  8. python close_wait_线上大量CLOSE_WAIT原因深入分析

    这一次重启真的无法解决问题了:一次 MySQL 主动关闭,导致服务出现大量 CLOSE_WAIT 的全流程排查过程. 近日遇到一个线上服务 socket 资源被不断打满的情况.通过各种工具分析线上问题 ...

  9. 通讯系统经验谈【一】TCP连接状态分析:SYNC_RECV,CLOSE_WAIT,TIME_WAIT

    摘自:http://maoyidao.iteye.com/blog/1744277 面试时看到应聘者简历中写精通网络,TCP编程,我常问一个问题,TCP建立连接需要几次握手?95%以上的应聘者都能答对 ...

最新文章

  1. C#拾遗(一、基本类型)
  2. 破玩意 | 多线程 +1 的最快操作
  3. python数据分析从入门到精通电子工业出版社_荐书丨Python数据分析从入门到精通...
  4. 使用Suhosin保护PHP应用系统(禁用eval)
  5. 人如其名(退了51CTO的群)
  6. 【caffe解读】 caffe从数学公式到代码实现3-shape相关类
  7. 如何防御DDoS攻击
  8. [云炬创业基础笔记]第四章测试24
  9. 怎么做 慢充 话费_高佣联盟充值话费省钱小技巧教程
  10. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.18. 数组函数和操作符...
  11. ansible之安装与简单使用
  12. mysql去掉重复数据只保留一条,以及取分组后的一条数据
  13. oracle 计算标准差函数,Oracle数据库之使用oracle来计算方差及标准差
  14. 还在为日程安排发愁?是因为你没有使用飞项
  15. 微服务与敏捷开发(Scrum/Kanban)的核心思想之我见
  16. Python中find_elements以及presence_of_element_located的用法
  17. 速卖通电脑办公行业什么产品好卖?解读2022速卖通重点招商品类及营销策略
  18. 新版阴阳师桌面版pc端固定窗口大小多开
  19. 本地局域网HTTPS解决方案 CA证书
  20. 房车接父母“反向过年”成春运新亮点

热门文章

  1. 数据库访问类(使用存储过程的)
  2. 无法解决 equal to 操作中 Chinese_PRC_CI_AS_WS 和 Chinese_PRC_CI_AS 之间的排序规则冲突...
  3. (转)检测到在集成的托管管道模式下不适用的ASP.NET 设置
  4. zz职位是有负面作用的
  5. linux下挂载U盘过程
  6. Samba 4.10 发布,完全支持 Python 3
  7. 标签view文字自动换行
  8. Linux内核同步机制之(四):spin lock【转】
  9. oracle11g 启动报错 缺少系统参数
  10. [Rainy开发笔记]使用RandomAccessFile实现的Tail