加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【golang】未关闭连接造成的血案

发布时间:2020-12-16 18:20:22 所属栏目:大数据 来源:网络整理
导读:正常来说,TCP连接的两端在使用完成要及时关闭连接,特别是主动连接的一方(客户端)使用完要主动关闭。 最近就遇到没有关闭连接造成重大问题的案例。 1. 一个服务端程序需要调用第三方服务,调用完后,没有关闭连接。 后果:服务端程序使用内存不断上涨,不

正常来说,TCP连接的两端在使用完成要及时关闭连接,特别是主动连接的一方(客户端)使用完要主动关闭。

最近就遇到没有关闭连接造成重大问题的案例。


1. 一个服务端程序需要调用第三方服务,调用完后,没有关闭连接。

后果:服务端程序使用内存不断上涨,不断上涨,不断上涨,最后挂掉。

未解决前,只能通过监控,内存快没有时重启一下。

解决:http请示调用第三方服务后,关闭连接。


2.一个hadoop的HDFS客户端,也是调用完没有关闭连接。

后果:namenode的fin2_wait越来越多,fin2_wait越来越多,fin2_wait越来越多,并不会自动降下来,然后造成很多namenode的连接timeout。

尝试的解决:在namenode服务器各种内核参数调整未能起作用。根据TCP连接原理,我们也了解到fin2_wait是因为客户端没有关闭连接造成的,也定位到所在的客户端服务器,对调用namenode比较明显的服务进行代码review,未发现未关闭情况。

未解决前,重启hadoop,泪呀。

解决:一个忽略的服务中不明显的GET请求,http连接后没有关闭,因此使用完close即可。


两个案例说明关闭连接的重要性,不是不必要的。平时强调,但还是没有注意到,需要加强压力测试和代码审查。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读