文档章节

一次线上tcp连接数告警的解决方案

jerrik
 jerrik
发布于 2017/09/10 12:24
字数 818
阅读 13
收藏 0
点赞 0
评论 0

         最近老大反馈某机器tcp连接数频繁告警,要我去定位下问题。接到任务后,首先分析一下问题:

 1.这个项目上线已有1-2年,以前未曾反馈tcp连接数超标的情况,难道是最近上线的xx需求导致的?

 2.tcp连接数一般都和网络问题有关,且该机器的业务有和银行打交道,且涉及到文件的上传与下载。

 3.查看下CPU和内存使用率是否偏高?

        首先用netstat查看了一下tcp连接,确实存在大量的ESTABLISHED连接,且一直有上升的趋势,这应该就是导致tcp连接数告警的主要原因.然后用jstack查看了线程堆栈,发现有大量的Connection Thread与xxx IP正在建立连接,该ip主要用来和银行进行sftp文件传输。

        打开IDE,全局搜索下使用了jsch的地方,果不其然,确实存在一个通用的文件上传与下载的服务类。

    这是一个全局的初始化方法,首先根据主机名、用户名和账号来创建一个会话,然后调用它的连接方法,一切都很自然,看不出毛病。

     

    下面来看一下文件上传的方法:

    首先获取sftp的通道,然后就直接使用jsch的内部方法实现文件的上传,最后调用disconnect()方法来释放连接。第一反应,有打开连接的方法,上传成功也将连接进行了关闭,怎么

会出现连接不释放的情况呢?

    

      接着看getChannelSftp()和disconnect()方法:

        

       

       根据创建的session来获取sftp渠道,然后调用sftp的connect()方法正式建立文件的输入输出通道。当文件上传、下载完毕,将sftp的渠道关闭,很正常的逻辑。

        但是在什么情况下会出现连接不释放的情况?看一下catch中的代码,当抛出了异常,系统会再次调用初始化init方法。跟进session.connect()方法,发现里面确实启动了一个名字为

Connection Thread的线程,且当调用disconnect()方法的时候 我们并没有手动的关闭掉该线程,而只是关闭了sftp通道而已,所以该线程一直都得不到释放。在init方法后,又重复调用了一次session连接方法,导致启动了两个线程。当时就认为应该是这个问题导致的。

       但是究竟是什么原因会导致抛出异常而发起重连呢?这里只能做一下猜测,或许是tcp连接主动断开导致重连然后频繁创建新的线程,或许是和银行发起文件传输的时候由于网络不稳定导致tcp自动重连,但是之前的线程已经建立。

        最终的解决办法就是去掉init后面的session.connect()方法和在调用disconnect()方法的时候 再调用session.disconnect();jsch的具体实现是手动中断掉之前创建的connection thread,然后将线程置空。

       博主第一次写文章,非喜勿骂,谢谢~

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
jerrik
粉丝 3
博文 11
码字总数 6574
作品 0
深圳
容量管理系统设计方案

版权声明:本文由谢海林原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/218 来源:腾云阁 https://www.qcloud.com/community 容量管理从本质来讲,主要...

偶素浅小浅 ⋅ 2016/11/16 ⋅ 0

【追光者系列】HikariCP连接池监控指标实战

摘自【工匠小猪猪的技术世界】--点击“阅读原文”关注 1.这是一个系列,有兴趣的朋友可以持续关注 2.如果你有HikariCP使用上的问题,可以给我留言,我们一起沟通讨论 3.希望大家可以提供我一...

chenssy ⋅ 04/25 ⋅ 0

运维的福音,深度剖析腾讯云自动运维平台

嘉宾介绍:祝海强,腾讯高级工程师。8年数据库经历,曾就职于第九城市、返利网任高级DBA。目前负责腾讯云CDB for MySQL运维团队,对MySQL、MSSQL等数据库运维、调优诊断具有丰富的经验。 一、...

OSC源创君 ⋅ 2016/11/17 ⋅ 7

案例|服务化架构系统监控难题解决方案

原文网址链接:http://url.cn/kVjUVO 众所周知,系统监控一直是拥有复杂IT架构的企业所面临的一个重要问题,而这也并不是每家企业都能够轻松解决的技术挑战。OPPO作为一家国际智能终端设备及...

数通畅联 ⋅ 2015/11/02 ⋅ 0

Connection reset原因分析和解决方案

在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家。例如我们线上的网关日志就会...

xionghuiCoder ⋅ 2015/09/20 ⋅ 9

【2016-06-13】一次BufferReader没有close引发的血案

Hive-Web是我司Web端查询Hive数据的服务,功能上比较简单,用户在Web上写一个SQL,Hive-Web将SQL提交到后端的服务执行查询,得到结果的hdfs路径,然后通过hadoop的fs读取文件,将其返回给用户...

rathan0 ⋅ 2016/06/13 ⋅ 0

跨平台网络服务器框架--PSS

目前代码更新更新在github上,就不维护多个服务器SVN了。 请到github上自取 ,地址为 https://github.com/freeeyes/PSS PSS 是易于开发,基于插件的,跨平台网络服务器框架,支持开发者使用插...

自由的眼 ⋅ 2014/11/17 ⋅ 0

15 分钟无门槛构建服务器性能监控系统

服务器监控是每个互联网厂商都重视并且想要尽可能做好的事情,从数据收集、数据处理、数据可视化最终再到实时监控告警,这一系列复杂的流程可能耗费企业大量的人力和时间,以至于某些时候因为...

七仙女很忙 ⋅ 01/02 ⋅ 0

Redis 和 Jaguar 迁入 K8S 记

近期接入 K8S 的业务中,Redis 和 Jaguar 两个业务方分别遇上了不同的性能问题。本文主要介绍接入过程中遇上的性能问题和解决办法。 Redis Redis 简介 蘑菇街使用开源的 redis 做为 Key-Valu...

koala bear ⋅ 05/26 ⋅ 0

如何一步一步做到单机千万并发连接(一)

最传统的网络服务器为一个连接一个线程,每个线程同步处理网络连接上的数据。当连接数到10000(10K),系统中就会需要产生1w个线程,导致性能问题,也称为10K问题。 10K问题是经典的网络服务...

dong ⋅ 2016/09/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 23分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 25分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 35分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 38分钟前 ⋅ 0

我的第一篇个人博客

虽然这是个技术博客,但是,我总是想写一些自己的东西,所有就大胆的在这里写下了第一篇非技术博客。技术博客也很久没有更新,个人原因。 以后自己打算在这里写一些非技术博客,可能个人观点...

Mrs_CoCo ⋅ 38分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 39分钟前 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 42分钟前 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 52分钟前 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 56分钟前 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部