零零客微文大全00ke.net

  • 我是这样发现线上 CLOSE_WAIT 问题的…
  • 来源:高效运维


1、阐述

内部架构:Tomcat应用程序-→ nginx -→ 其他Tomcat应用程序,内部Tomcat应用通过nginx调用其他应用。

HTTP插件:HttpClient 4.2.3

关闭连接的代码:httpClient.getConnectionManager().closeIdleConnections(5, TimeUnit.SECONDS);

2、说明

要说明的是CLOSE_WAIT产生的原因和服务器、nginx、其他配置无关,是HttpClient的getConnectionManager引起的。

3、排查思路

这个问题已经困扰我很久了,查看过网上的很多办法,也试过很多方法。

比如:修改服务器内核、修改nginx配置文件、更改nginx版本,都是没有用的,还是上面那句话和服务器、nginx无关。

最后决定自己分析请求,查找真正的根本原因,以下为排查的最终步骤

4、问题排查

首先确认CLOSE_WAIT产生的链接,链接的IP和端口

由上图看出是本机链接nginx 81端口造成的CLOSE_WAIT

抓包分析其中一个CLOSE_WAIT所用的本机端口:

抓包分析正常关闭的请求:

分析不正常端口41584,晚上22点01分02秒请求连接,22点01分02秒传输数据结束,22点02分07秒,nginx发送关闭连接的包,Tomcat同意关闭,问题就出现在这里,在Nginx请求关闭连接后,Tomcat并没有回复同样关闭连接的包,没有完成四次握手,故产生了CLOSE_WAIT。

分析所有正常连接发现没有产生CLOSE_WAIT的端口都是Tomcat主动关闭的,产生CLOSE_WAIT的都是nginx主动关闭,Tomcat被动关闭的。

再次分析所有的不正常端口

发现Tomcat周期性的向Nginx发送关闭连接的请求,但是Nginx回复Reset包,说白了就是Tomcat请求关闭连接,但是Nginx说我没有这个链接(已经在前面主动关闭),所有CLOSE_WAIT会一直存在,直至两个小时以后系统强制关闭。

至于为什么会周期性的一起并发的关闭的连接,而不是一个一个关闭,或者为什么在收到Nginx关闭连接请求,Tomcat不关闭,看上述Java代码:httpClient.getConnectionManager().closeIdleConnections(5, TimeUnit.SECONDS);

这段代码表示调用httpClient的getConnectionManager,然后利用closeIdleConnections进行关闭空闲连接,5代表是五秒(不知道解释的对不对)。

网上查找getConnectionManager,说是httpclient的链接池管理工具。就是把请求都扔里面,然后Manager帮你做相关处理。

但是上述代码写的是5秒之内连接空闲就会关闭,httpclient又是一个很成熟的技术,于是没有怀疑这个的问题(我不是开发,代码层我无法分析)。

继续分析其他正常关闭的包,发现并不是所有正常关闭的连接都是五秒关闭的,而产生CLOSE_WAIT的,一般请求关闭都是超过65秒的(65是nginx keepalive timeout的值),为了确认问题的根源,我把nginx的keepalive timeout设置为240秒(Nginx主动关闭连接后,最长Tomcat第一次发送关闭连接的包据数据传输完毕的时间间隔为3分28秒),实时查看CLOSE的增长变得缓慢,改为360秒,几乎不怎么增长,但是还有增长,索性改为0,过了一个多小时,只会下降,不会增多,所以断定是HTTPCLIENT出现的问题。

5、继续分析

查看httpclient官方文档://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/conn/ClientConnectionManager.html

上面说在给定的时间内(上述代码的五秒)链接没有被使用,就会在池中关闭连接。同时也会关闭过期的连接。

看解释说只要连接5秒没有被使用,就会关闭连接,不会大于65秒的,至此又回到诧异懵逼中。。。

再次回想连接池中周期性发送FIN包,让我判断没有在五秒内关闭连接只有两种可能:一、配置没有生效,二、HTTPCLIENT空闲连接检测机制。

首先从服务器端快速解决:修改linux内核net.ipv4.tcp_tw_recycle 和 net.ipv4.tcp_timestamps 为 0,sysctl -p使之生效。

然后把自己的想法说给开发人员说后,无法断定空间连接检测的机制是什么,于是决定修改代码,换用另一种关闭的方式(没有时间考虑上面的两个想法):将所有完成请求的连接通过httpclient的releaseConnection和SHUTDOWN进行关闭,修改完成并在测试环境部署(测试环境也同样有CLOSE_WAIT),运行至今改过代码的并无产生任何CLOSE_WAIT。

6、总结

CLOSE_WAIT产生的原因是由代码引起的,目前能确认的是HTTPCLIENT的getConnectionManager的连接池引起的,但是为什么设置的5秒没有生效,空闲连接的检测机制是什么,这些还无法得知。

截止到2018年6月4日,自从改了代码和内核参数以后,运行半年,在没有出现过过多CLOSE_WAIT的情况。

作者:杜先生的博客

原文:https://www.cnblogs.com/dukuan/p/8178728.html#4334700

AIOps 风向标,GOPS 2019 · 上海站,浙江移动网络运维 Dev&AIOps; 专家带来“云之巢,莫问运维路:浙江移动基于 AIOps 的基础设施实践之路”,敬请期待~

想知道 GOPS 2019 · 上海站,有哪些行业大咖来分享?

点击,看更多运维专家






















    已同步到看一看
















    发送中
















    社会

    • 



手机是如何损害我们的大脑的?
      手机是如何损害我们的大脑的?
      如果你打算在这个周末看《波尔达克》的大结局,你最好把手机放在看不见的地方,否则你会发现自己完全没心思去观看剧情。 上周,一项针对1.25万人的调查显示,68%的英国人在观看电视节目时查看手机,结果
      译言
    • 



平坟往事:世间无报应,不妨认为有
      平坟往事:世间无报应,不妨认为有
      人生最大的悲哀,不是倒下,而是倒下之后,还有很多人鼓掌。 前两天,曾经主政我家乡的官员徐某落马了。消息传到我老家的同学微信群里,有人在群里鼓掌,有人说“时候一到,必定要报”。 徐某在我们那个市工作
      海涛评论
    • 



说说房贷利率新政,看到本质
      说说房贷利率新政,看到本质
      Edward Burne-Jones,The Sirens 很多人关心房贷利率新政,我仔细看了看,相比当下利率,有些地方以后会贵一点,但贵不了多少,有些地方以后便宜一点,但也便宜不了多少,结论就是,
      连岳
    • 



社交传播:从追求控制到追求失控
      社交传播:从追求控制到追求失控
      从追求控制到追求失控? What's your problem? 的,关于这个问题,其实我们在社交传播实践中早就是这么做的,但也许并不自知,其实一直以来,我们所追求的消费者的自传播,用户之间的口碑
      东乔西看
    • 



迪士尼为何这么“霸道”?
      迪士尼为何这么“霸道”?
      近日,上海迪士尼对游客强制搜包一事引发巨大争议,上海浦东新区消保委介入之后,表示上海迪士尼不接受调解,更是给此次事情火上浇油。而上海迪士尼的回应也是个性十足——你们安检无乐趣,我们也没有乐趣。 上海迪
      三联生活周刊
    • 



永远去做你余生中最重要的那件事
      永远去做你余生中最重要的那件事
      彭萦 改变自己主创 创业者 | 品牌人 | 性格分析师 上期语音我和「改变自己」会员们聊了「完美主义」这个话题,正如本文所说的一样:一个人的时间有限,你做了这件事,就意味着你不能做另外
      改变自己
    • 



买房炒股不如炒鞋?00后的资本游戏
      买房炒股不如炒鞋?00后的资本游戏
      文 | 邢海洋 那是NBA在中国的黄金时代,姚明刚去美国打球,乔丹刚退役。80后的年轻人和90后的孩子都是NBA追星一族。一双明星联名的球鞋就成为粉丝们最直接也最亲密的纽带。我有个亲戚在耐克的旗舰店工
      三联生活周刊
    • 



因为一包姨妈巾,我和室友翻脸:坏人是好人惯出来的!
      因为一包姨妈巾,我和室友翻脸:坏人是好人惯出来的!
      你做我的朗读者 我做你的摆渡人 戳蓝字一键关注 摆渡人 ☾ 每晚21:39 无论你在哪里,请记得打开手机。 因为一包姨妈巾,我和室友翻脸 - 来自摆渡人 - / 10:57 ♪ 点上方绿标即可收听
      摆渡人
    • 



2015-2019,我连续五年参加成长会
      2015-2019,我连续五年参加成长会
      持续力 公众号ID:scalerstalk 个人微信号:escalers (可加Scalers个人微信交流) 关注 ScalersTalk 成长会 2019 年火热招募中,参见《用持续行动突破成长
      ScalersTalk成长持续论
    • 



我是这样发现线上 CLOSE_WAIT 问题的…
      我是这样发现线上 CLOSE_WAIT 问题的…
      1、阐述 内部架构:Tomcat应用程序-→ nginx -→ 其他Tomcat应用程序,内部Tomcat应用通过nginx调用其他应用。 HTTP插件:HttpClient 4.2.3 关闭连接的
      高效运维
    • 



王路:脱口秀与写作
      王路:脱口秀与写作
      去听一场脱口秀的开放麦。开放麦是打磨段子的地方。写好台词,先找些观众听,观众笑的地方就留着,不笑的就砍掉。靠这种办法,段子磨得越来越熟,再去搞商业演出。 我第一次听时,老是替台上的演员尴尬,觉得太难
      王路在隐身
    • 



原创丨警察举个枪,还要经暴徒的允许?
      原创丨警察举个枪,还要经暴徒的允许?
      天台黄茶稀有品种紫凝黄热销7600余盒,战友最多评价:好茶好喝!不怎么喝茶的人都说“没得说的好茶”!礼盒包装中秋馈赠佳品,低至85折,戳图抢! 警察举个枪,还要经暴徒的允许 - 来自占豪 - / 10
      占豪
    • 



用户数突破2亿,但钉钉的用户增长很可能到头了
      用户数突破2亿,但钉钉的用户增长很可能到头了
      2019年8月27日,钉钉未来组织大会在杭州召开,CEO无招宣布,截至2019年6月30日,钉钉用户数突破2亿,企业组织数突破1000万。 2017年12月27日,钉钉宣布注册用户超过1亿,钉钉1.
      移动吐槽
    • 



正在消失的乡镇初中
      正在消失的乡镇初中
      文/树先生 (识局微信公共账号zhijuzk) ▼ 1 阿来让我给他的儿子找一个临时工干。 印象中,阿来儿子才上初中,现在应该是上学的时候。 “不上了,上了也没啥意思。”阿来回答。 我
      识局
    • 



普通家庭的教育,来自烟火气
      普通家庭的教育,来自烟火气
      父亲带着不肯听从教导主任要求、而马上要被勒令开除的儿子奔走在这个城市中,他并不是去寻找肯“接手”儿子的“下家”学校。 父亲先去了劳务市场,求职失败,被势利的人讥笑嘲讽乃至侮辱。去了面馆,发现口袋里的钱
      三联生活周刊
    << 16 17 18 19 20 >> 

    公众号 • 高效运维

    Flag Counter