CLOSE_WAIT 和TCP_KEEPALIVE
之前面试 曾经被问到 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相关推荐
- CLOSE_WAIT
目录 0.引用阅读 1.TCP状态转移图及TCP四次挥手的图 1.1 TCP状态转移图-摘抄自<TCP/IP详解卷1> 1.2 TCP四次挥手 2.CLOSE_WAIT产生的原因 3.解决 ...
- TCP端口状态说明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT
一. 首先说下tcp端口的几种状态: 1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. 2.ESTABLISHED状态 ESTABLISHED的意思是建立连接.表示 ...
- 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT
https://my.oschina.net/fdhay/blog/638631 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 2016-02-18 大房 大房说 本文是我将最 ...
- java项目close wait_服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: 里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态. 在服务器的日常维护过程中,会经 ...
- 再谈应用环境下的TIME_WAIT和CLOSE_WAIT
昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/article/details/6615051 里头的分析过程有 ...
- TIME_WAIT和CLOSE_WAIT状态
下图了解各种状态: 如果服务器出现了异常,很大的可能是出现了以下两种情况: 服务器保持了大量的TIME_WAIT状态. 服务器保持了大量的CLOSE_WAIT状态. TIME_WAIT状态产生原因: ...
- CLOSE_WAIT状态的原因与解决方法 --转
转自:http://blog.chinaunix.net/uid-20357359-id-1963662.html 这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司 ...
- python close_wait_线上大量CLOSE_WAIT原因深入分析
这一次重启真的无法解决问题了:一次 MySQL 主动关闭,导致服务出现大量 CLOSE_WAIT 的全流程排查过程. 近日遇到一个线上服务 socket 资源被不断打满的情况.通过各种工具分析线上问题 ...
- 通讯系统经验谈【一】TCP连接状态分析:SYNC_RECV,CLOSE_WAIT,TIME_WAIT
摘自:http://maoyidao.iteye.com/blog/1744277 面试时看到应聘者简历中写精通网络,TCP编程,我常问一个问题,TCP建立连接需要几次握手?95%以上的应聘者都能答对 ...
最新文章
- C#拾遗(一、基本类型)
- 破玩意 | 多线程 +1 的最快操作
- python数据分析从入门到精通电子工业出版社_荐书丨Python数据分析从入门到精通...
- 使用Suhosin保护PHP应用系统(禁用eval)
- 人如其名(退了51CTO的群)
- 【caffe解读】 caffe从数学公式到代码实现3-shape相关类
- 如何防御DDoS攻击
- [云炬创业基础笔记]第四章测试24
- 怎么做 慢充 话费_高佣联盟充值话费省钱小技巧教程
- PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.18. 数组函数和操作符...
- ansible之安装与简单使用
- mysql去掉重复数据只保留一条,以及取分组后的一条数据
- oracle 计算标准差函数,Oracle数据库之使用oracle来计算方差及标准差
- 还在为日程安排发愁?是因为你没有使用飞项
- 微服务与敏捷开发(Scrum/Kanban)的核心思想之我见
- Python中find_elements以及presence_of_element_located的用法
- 速卖通电脑办公行业什么产品好卖?解读2022速卖通重点招商品类及营销策略
- 新版阴阳师桌面版pc端固定窗口大小多开
- 本地局域网HTTPS解决方案 CA证书
- 房车接父母“反向过年”成春运新亮点
热门文章
- 数据库访问类(使用存储过程的)
- 无法解决 equal to 操作中 Chinese_PRC_CI_AS_WS 和 Chinese_PRC_CI_AS 之间的排序规则冲突...
- (转)检测到在集成的托管管道模式下不适用的ASP.NET 设置
- zz职位是有负面作用的
- linux下挂载U盘过程
- Samba 4.10 发布,完全支持 Python 3
- 标签view文字自动换行
- Linux内核同步机制之(四):spin lock【转】
- oracle11g 启动报错 缺少系统参数
- [Rainy开发笔记]使用RandomAccessFile实现的Tail