http连接未释放导致生产故障

     凌晨4点运维老大收到NAT网关连接数打满报警(官网页面接口超时),运维自己先看了看服务器相关配置,先后还联系了阿里云的客服,客服建议升级NAT网络连接阈值,之前是1w升级到了5w,但后来还是给研发打电话确认问题。    

     大早上7点领导给打电话,那会儿娃还在睡觉...我还以为是垃圾电话,怕把孩子吵醒直接挂了,吃完早饭才看见技术群爆了,生产服务报警....几个研发运维小伙伴一起讨论方案,初步认为昨天发版导致的问题,优先恢复业务,最快就是回滚服务,但不严谨的是7:38只回退了 1个微服务节点,另一个节点后来也报警8:17回退,至此运维看阿里云监控tcp连接数才降下来,期间还有oom报警。具体原因还在定位。

原因分析:   

微服务里发版的内容无非是增加了一个第三方服务的调用(腾讯云的推送服务),找到代码确认问题还比较好定位,调用im的http接口用的 cn.hutool.http 工具类,但并未设置连接超时和读超时。本地测试了一下 这个工具类默认超时时间20s多,而从凌晨4点开始腾讯云接口超时,导致我们自己的微服务一直等待20s后超时。

 try {String response = HttpUtil.createPost("http://192.168.126.10:903/test").contentType(MediaType.APPLICATION_JSON_VALUE).body("{}").execute().body();} catch (Exception e) {e.printStackTrace();System.out.println(System.currentTimeMillis() - start);}

加上超时时间的设置 .timeout(3000)

String response = HttpUtil.createPost(requestUrl).contentType(MediaType.APPLICATION_JSON_VALUE).body(json.toJSONString()).timeout(3000).execute().body();

     但腾讯云接口为什么会连接超时呢,如果接口本身是连通的且响应比较快应该也不会发生后面一系列问题。腾讯的im服务分级别,普通服务可能有限制,比如每秒200次请求;但我们的推送并没有达到腾讯的频率阈值,为什么报连接超时,即便达到阈值,对方也应该会立即返回一个错误码,而不会出现连接超时的错误,即便设置超时时间,好像还是不能说明到底为什么会有connect timeout的问题;所以只设置超时时间,还是不能完全解决连接超时的问题

     问题回到运维接的报警(最初的连接数暴涨)上,查看我们自己的nat网关才发现连接数今天凌晨开始在持续增加,直到打满了达到了阈值(1w左右),达到阈值后,后面再调用外部接口获取不到可用连接,过了默认的连接超时时间,自然就连接超时了。

     那为什么连接数会暴涨?理论上大厂腾讯的接口应该很快,不会出现响应慢一直占着连接的情况,那只有一种可能我们调用对方接口时,请求结束并未释放连接。那为什么没释放?

本地简单测试一下,这里起了2000个线程,每个线程内部逻辑去请求一个虚假的地址,通过netstat查看tcp连接情况

public class Main {public static void main(String[] args) {for (int i=0;i<2000;i++) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {long start = System.currentTimeMillis();try {String response = HttpUtil.createPost("http://192.168.12.10:903/am/testHis").contentType(MediaType.APPLICATION_JSON_VALUE).body("{}").execute().body();} catch (Exception e) {System.out.println(System.currentTimeMillis() - start);}System.out.println("线程结束"+ Thread.currentThread().getName());}});thread.start();}}
}

tcp链接信息如下:SYN_SENT,说明还在tcp连接建立阶段(因为虚假的接口地址,肯定是不能连通的,到了连接超时时间会报connect time out)。 没有进入ESTABLISHED状态。

但实际等线程都结束后 tcp连接是释放了的。

腾讯云接口对接情况是接口是连通的,但请求完接口连接未释放?

解决

增加请求连接关闭代码

finally {
            if (httpResponse != null) {
                httpResponse.close();
            }
        }

经验教训

(1)凡是对接第三方接口的需要设置超时时间

(2)操作资源时记得及时关闭,比如数据库连接,redis连接,文件句柄等等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/407945.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装torchvision==0.5.0

安装pytorch 1.4 但是在当前配置的镜像源中找不到 torchvision0.5.0 这个版本的包。 直接找资源下载 网址添加链接描述 直接运行该命令&#xff0c;成功。 然后重复运行上面的命令就可以了 # CUDA 9.2 conda install pytorch1.4.0 torchvision0.5.0 cudatoolkit9.2 -c pyto…

Python编码系列—Python单元测试的艺术:深入探索unittest与pytest

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

CS1.5快捷键

《黑神话悟空》玩不起&#xff0c;玩起了23年前的cs1.5 B11&#xff1a;USP(警察自带手枪&#xff09; B12&#xff1a;Glock18(匪徒自带手枪) B13&#xff1a;Desert Eagle&#xff08;沙漠之鹰&#xff09; B14&#xff1a;P-228 B15&#xff1a;Dual Berettas&#xff08;匪…

linux中对.jar文件的配置文件进行修改

linux中对.jar文件的配置文件进行修改 第一步&#xff0c;进入你的.jar的当前文件夹 第二步 &#xff0c;编辑你指定的 .jar 文件 编辑之前请先备份 cp xxx.jar xxx-1.2.jar 输入编辑命令 vim xxx.jar第三步&#xff0c;找到你要编辑的文件 输入命令进入vi模式&#xff08;…

金蝶云星空开发简单账表《物料年采购入库报表》

文章目录 业务背景业务需求方案设计详细设计测试业务背景 系统现有功能不支持查询过去一年内所有物料的入库数,需要人工导出,然后再汇总。 业务需求 可以查询所有物料的入库数,多个物料,单个物料,多个组织,单个组织的入库数,以及支持查询入库数大于某个阈值。 方案设…

Unity教程(十一)使用Cinemachine添加并调整相机

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

一文彻底搞懂CNN - 模型架构(Model Architecture)

CNN Model Architecture CNN&#xff08;卷积神经网络&#xff09;的模型架构由输入层、卷积层、池化层以及全连接层组成&#xff0c;通过卷积操作提取图像特征&#xff0c;并通过池化减少参数数量&#xff0c;最终通过全连接层进行分类或回归。 输入层&#xff1a;接收原始图…

【奇某信-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Android Jitpack制作远程仓库aar流程

开发高效提速系列目录 软件多语言文案脚本自动化方案Android Jitpack制作远程仓库aar流程 Android Jitpack制作远程仓库aar流程 背景aar制作与使用1. aar制作2. aar使用 异常解决总结 博客创建时间&#xff1a;2023.08.24 博客更新时间&#xff1a;2023.08.24 以Android stud…

【闪送-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

如何使用ssm实现农家乐信息平台的设计与实现+vue

TOC ssm066农家乐信息平台的设计与实现vue 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各…

第12章 网络 (6)

12.8 网络层 12.8.4 分组转发 转发IP分组&#xff0c;根据目标地址分为&#xff1a; 1. 直接和本地相连。 2. 不直接相连&#xff0c;需要网关转发。 int ip_route_input_noref(skb, daddr, saddr, tos, net_dev)&#xff1a; //查找路由表。 如果 skb->_skb_r…

AI产品经理的35岁危机_产品经理会有35岁危机吗

01 被裁的35岁朋友 去年&#xff0c;一家知名公司大裁员&#xff0c;很多 35 岁的非高管员工被牵连&#xff0c;包括我的一位朋友。 我第一时间联系了他&#xff0c;看看有没有能够帮上忙的地方。 我&#xff1a;传闻XX公司要收购你们&#xff1f; 朋友&#xff1a;是的。我要…

基于element-ui 日期选择器el-date-picker, 即对日期做区间限制

需求&#xff1a; 有时候需求会让我们对日期选择器做限制&#xff0c;即控制最多可跨越多少个月份&#xff0c;其中涉及到不同年份该如何计算。 HTML&#xff1a; <el-date-pickerv-model"timePeriod"type"monthrange"value-format"yyyyMM"…

鸿蒙Harmony编程开发:HTTPS服务端证书四种校验方式

如果你还是使用HttpRequest的话&#xff0c;答案是否定的。但是&#xff0c;鸿蒙开发者很贴心的推出了远场通信服务&#xff0c;可以使用rcp模块的方法发起请求&#xff0c;并且在请求时指定服务端证书的验证方式&#xff0c;关键点就在SecurityConfiguration接口上&#xff0c…

Kafka·概述

概览 Producer 生产者发送消息给broker&#xff0c;并不是生成一条消息后立刻发送&#xff0c;而是积攒多条后&#xff0c;批量发送到broker。可以通过配置参数batch.size&#xff08;单位字节&#xff09;调整积攒多少后发送 Consumer Topic 消息的分类 当Producer发送指定…

OpenAI 重回巅峰:ChatGPT-4O 最新模型超越谷歌 Gemini 1.5,多项测试夺冠!

谷歌上周发布的Gemini 1.5 Pro模型&#xff0c;在LMSYS办的聊天机器人竞技场Chatbot Arena中获得第一名。但是&#xff0c;OpenAI迅速反应&#xff0c;推出了最新的chatgpt-4o-latest模型&#xff0c;重新夺回了冠军头衔。 chatgpt-4o-latest模型简介 OpenAI最近推出了名为gpt-…

Unity教程(十二)视差背景

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

C语言-从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以“!”结束

题目要求&#xff1a; 从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以"!”结束 1.实现程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {FILE* fp fopen("…

鸿蒙内核源码分析(用户态锁篇) | 如何使用快锁Futex(上)

快锁上下篇 鸿蒙内核实现了Futex&#xff0c;系列篇将用两篇来介绍快锁&#xff0c;主要两个原因: 网上介绍Futex的文章很少&#xff0c;全面深入内核介绍的就更少&#xff0c;所以来一次详细整理和挖透。涉及用户态和内核态打配合&#xff0c;共同作用&#xff0c;既要说用户…