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

news2024/11/30 4:59:27

     凌晨4点运维老大收到报警(公司官网页面超时,上次故障因为运维修改nginx导致官网域名下某些接口不可用后,运维在2台nginx服务器上放了检测程序,检测官网页面),运维自己先看了看服务器相关配置,后来还是给研发打电话确认问题。    

     大早上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左右),达到阈值后,后面再调用外部接口获取不到可用连接,过了默认的连接超时时间,自然就连接超时了。

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

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

经验教训

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 安装MAT(MemoryAnalyzerTool),并且分析java dump的方法

当我们的java进程出现异常的时候,我们第一件想做的事情是什么呢?应该就是要分析java的内存了。假如说,我们已经有了一个java内存的dump文件,有哪些的方法,可以对这个导出的dump文件进行分析呢? 比如&#…

Vue插值:双大括号标签、v-text、v-html、v-bind 指令

创建应用程序实例后,需要通过插值进行数据绑定。数据绑定是 Vue.js 最核心的一个特性。建立数据绑定后,数据和视图会相互关联,当数据发生变化时,视图会自动进行更新。这样就无须手动获取 DOM 的值,使代码更加简洁&…

【Python_PyQtGraph 学习笔记(十一)】基于ImageExporter更改导出图片的大小

基于ImageExporter更改导出图片的大小 前言正文1、ImageExporter 类介绍1.1 ImageExporter 类特点1.2 ImageExporter 类用法2、示例代码3、遇到的问题前言 在 基于PyQtGraph设置槽函数,实现保存图片到本地的功能 一文中我们成功地将 PyQtGraph 绘制的图形以图片形式保存到本地…

ChatGPT与Discord的完美结合——团队协作的得力助手

本文将教你如何集成Discord Bot,助力团队在工作中实现更高效的沟通与协作。通过充分发挥ChatGPT的潜力,进一步提升工作效率和团队协作能力。无需编写任何代码即可完成本文所述的操作,进行个性化定制只需对参数进行微调即可。 方案介绍 如果在…

【Python系列】中位数计算

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

鸿蒙开发5.0【基于AVCodecKit】音视频解码及二次处理播放

1:场景描述 场景:基于VideoCoder的音视频解码及二次处理播放。 首先导入选择器picker模块,使用PhotoViewPicker方法拉起图库选择视频文件,将视频文件传递到native侧使用Demuxer解封装器进行解封装,再使用OH_VideoDec…

Yolov8:模型部署到安卓端

1. 项目准备 1.1 先安装JDK和Android studio (1)JDK下载: 官网站:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 同意协议后,下载相应版本的JDK 我这里没有下载JDK21版的&a…

作品集图片美化处理网站推荐

今天要做作品集的时候发现单一的截屏很单调,想着看能不能添加一些边框之类的元素使图片更加精美有活力,于是就找到了一个个人认为非常好用的网站镜头 - 创建惊人的模型 (shots.so),它利用的是ai算法,使用起来非常便捷,…

亚马逊店铺自养号测评:安全可控的引流新策略全解析

亚马逊作为全球最大的电商平台之一,吸引了无数卖家加入其平台,争夺市场份额。然而,新店如何在众多竞争对手中脱颖而出,实现引流和销售的快速增长,成为了卖家们亟待解决的问题。本文珑哥将和大家探讨亚马逊新店引流的关…

浅析Thermo-Calc软件在合金热处理工艺中的应用

Thermo-Calc软件是世界公认的最好的最全面的多元体系热力学与相图计算软件,具备通用、计算灵活的特点,被广泛应用于钢铁、有色金属、核燃料、高熵合金等多领域的材料成分设计优化、工艺过程的设计优化、缺陷和问题的分析等过程中,是目前国内外…

焊工安全操作规范

1、焊工作业人员必须经专业安全技术培训考试合格,发给许可证后,持证上岗操作。明火作业必须履行审批手续。 2、工作前应认真检查工具、设备是否完好,焊机的外壳是否可靠地接地。焊机的修理应由电气保养人员进行,其他人员不得拆修…

Maven-07.依赖管理-依赖范围

一.依赖范围 一个项目依赖的jar包默认情况下可以在任何地方使用。这里的任何地方是指在main文件夹范围内作用,test文件夹范围内作用和package打包进去都可以。 依赖的范围可以通过scope标签进行调整, scope的值和其作用范围以及代表性jar包范例如上表所…

渗透必备:BurpSuite

一、介绍 BurpSuite是渗透测试、漏洞挖掘以及Web应用程序测试的最佳工具之一,是一款用于攻击web 应用程序的集成攻击测试平台,可以进行抓包、重放、爆破,包含许多工具,能处理对应的HTTP消息、持久性、认证、代理、日志、警报。 …

电力领域知识图谱:赋能电力智能发展的关键技术

电力领域知识图谱:赋能电力智能发展的关键技术 前言电力领域知识图谱 前言 电力领域知识图谱作为一项新兴技术,在电力系统中具有重要的应用价值。它能够以结构化的方式刻画电力系统中的各种概念、实体、事件及其间的关系,为电力人工智能的发…

淮北农商银行年报与审计报告数据不合,盈利能力与资产质量承压

撰稿|芋圆 来源|贝多财经 7月24日,国家金融监督管理总局发布《国家金融监督管理总局安徽监管局关于淮北农村商业银行股份有限公司(以下简称“淮北农商行”或“淮北农商银行”)吸收合并安徽濉溪农村商业银行股份有限公司的批复》。 内容显示…

SM4前后端加密和解密

一&#xff1a;前端vue 二&#xff1a;后端Java 三&#xff1a;详细 3.1maven添加 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.66</version> </dependency> <…

合宙Air700ECQ硬件设计手册——主要性能

Air700ECQ是一款基于移芯EC716E平台设计的LTE Cat 1无线通信模组。支持移动双模FDD-LTE/TDD-LTE的4G远距离无线传输技术。以极小封装&#xff0c;极高性价比&#xff0c;满足IoT行业的数传应用需求。例如共享应用场景&#xff0c;定位器场景&#xff0c;DTU数传场景等。 无论是…

IP in IP 协议

IP in IP 是一种多重IP协议&#xff0c;即&#xff1a;客户机可以发送一个IP协议内部在嵌套一个IP协议到某个特定的主机上&#xff0c;在由具体的主机作为路由进行转发的协议。 例如&#xff1a; IP in IP帧协议结构为&#xff0c;第一层为发送到IP in IP 路由主机的报文&…

引领未来教育的新工具,NUC 14 Pro 赋能智慧课堂

在追求高效、互动、个性化的教育新时代&#xff0c;传统的教学工具已难以满足现代教育的需求。华硕NUC 14 Pro应运而生&#xff0c;它以小巧的机身、强大的性能以及丰富的商用功能&#xff0c;正逐步成为重塑教育生态的重要力量。它不仅是一款教学工具&#xff0c;更是推动教育…

从bbl和overleaf版本解决Arxiv提交后缺失参考文献Citation on page undefined on input line

debug 食用指南&#xff1a;框架/语言&#xff1a;问题描述&#xff1a;解决方案&#xff1a;问题原因&#xff1a;版本解决方案&#xff1a; 安利时间&#xff1a; 食用指南&#xff1a; 框架使用过程中的问题首先要注意版本发布时间造成方法弃用 当你在CSDN等网站查找不到最…