您好!欢迎来到源码码网

Java NIO与Tomcat简单连接调优

  • 源码教程
  • 来源:源码码网
  • 时间:2020-06-30 10:52
  • 阅读:779


image.png

这周遇到一个连接断开的问题,便沿着这条线学习了一下Java NIO,顺便验证一下Tomcat作为spring boot默认的web容器,是怎样管理空闲连接的。

Java NIO(new IO/non-blockingIO)不同于BIO,BIO是堵塞型的,并且每一条学习路线的IO章节都会从BIO说起,因此大家非常熟悉。而NIO涉及Linux底层的select,poll,epoll等,要求对Linux的网络编程有扎实功底,反正我是没有搞清楚,在此推荐一篇通俗易懂的入门文章:

image.png

底层的技术先交给大神们解决,我们着重从Java上层应用的角度了解一下。

JDK 1.5起使用epoll代替了传统的select/poll,极大提升了NIO的通信性能,因此下文提到Java NIO都是使用epoll的。

Java NIO涉及到的三大核心部分ChannelBufferSelector,它们都十分复杂,单单其中一部分都能写成一篇文章,就不班门弄斧了。此处贴上一个自己学习NIO时设计的样例,功能是服务器发布服务,客户端连上服务器,客户端向服务器发送若干次请求,达到若干次答复后,服务器率先断开连接,随后客户端也断开连接。

NIO服务器端关键代码

image.png

NIO客户端关键代码

image.png

服务器日志

image.png

客户端日志

image.png

从这个样例可以看到,客户端和服务器都能根据自身的策略,与对端断开连接,本例中是服务器首先断开连接,根据TCP协议,必然有一个时刻服务器处于FIN_WAIT_2状态,而客户端处于CLOSE_WAIT状态


image.png

我们通过netstat命令找出这个状态,果不其然。

image.png

但是JDK提供的NIO接口还是很复杂很难写的,要用好它就必须借助于NettyMina等第三方库的封装,这部分就先不写了。接下来考虑另外一个问题,在大并发的场景下,成千上万的客户端涌入与服务器连接,连接成功后不发送请求,浪费了服务器宝贵的资源,这时服务器该如何应对?

答案当然是设计合适的连接池来管理这些宝贵的资源,为此我们选用Tomcat作为学习对象,了解一下它是如何管理空闲连接的。

TomcatConnector组件用于管理连接,Tomcat8默认使用Http11NioProtocol,它有一个属性ConnectionTimeout,注释如下:

image.png

可以简单理解成空闲超时时间,超时后Tomcat会主动关闭该连接来回收资源。

我们将它修改为10秒,得到如下配置类,并将该spring boot应用打包成tomcat-server.jar

image.png

我们将上文的NIO客户端略微修改一下形成TomcatClient,功能就是连上服务器后什么都不做。

image.png

分别运行服务器和客户端,可以看到客户端打印如下日志

image.png

30:27连上服务器,不进行任何请求,经过10秒后到30:37被服务器断开了连接。

此时netstat会发现还有一个TIME_WAIT的连接

image.png

image.png

根据TCP协议主动断开方必须等待2MSL才能关闭连接,Linux默认的2MSL=60秒(顺带说一句网上很多资料说CentOS/proc/sys/net/ipv4/tcp_fin_timeout能修改2MSL的时间,实际并没有效果,这个参数应该是被写进内核,必须重新编译内核才能修改2MSL)。持续观察netstat发现31:36的时候TIME_WAIT连接还在,到了31:38连接消失了,可以认为是31:37关闭连接,对比上文30:37刚好经过了2MSL(默认60秒)的时间。

image.png


注:本文转自互联网,如有侵权请及时联系我们删除

特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 工程项目一体化自动管理软件解决方案
  • 工程项目一体化自动管理软件解决方案
  • 1.项目概述1.1项目背景在工程建设行业数字化转型浪潮下,传统项目管理面临信息孤岛、协同困难、进度不可控、成本超支等痛点。本方案旨在构建一个覆盖工程项目全生命周期、全参与方、全业务流程的一体化智能管理平台。1.2解决方案愿景打造数据驱动、智能协同、风险预警、自动执行的工程大脑,实现:管理流程自动化率≥80%项目协同效率提升40%成本偏差率降低至±3%以内安全事故发生率降低60%1.3目标用户矩阵┌───────────────┬
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:26
  • 阅读:168
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 第一部分:需求文档1.项目概述1.1项目背景为企事业单位、车队运营商、租赁公司等提供一套完整的车辆全生命周期管理解决方案,实现车辆管理数字化、智能化。1.2项目目标建立车辆从购置到报废的全流程管理体系实现用车申请、调度、监控、结算的闭环管理通过数据分析优化车辆使用效率降低车辆运维成本20%以上1.3用户角色矩阵┌──────────────┬─────────────────────────────┬──────────────
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:11
  • 阅读:157
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档文档版本: V1.0项目目标: 构建一个集环境智能监测、设备自动化控制、生长模型分析、溯源管理与远程指挥于一体的综合物联网管理平台,实现降本增效、提质增产、风险预警与品牌增值。1.系统总体概述1.1核心价值: 数据驱动决策,解放人力,实现农业/渔业生产的精准化、自动化与智能化。1.2用户角色:生产员/养殖员: 现场巡视、接收告警、执行设备手动控制、查看实时环境
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:04
  • 阅读:67
  • 程序员AI编程工具推荐
  • 程序员AI编程工具推荐
  • AI编程工具是当前开发者的“副驾驶”,能够极大提升开发效率。以下我将从通用型、代码专用型、垂直领域型以及开源/自部署型几个维度为您分类推荐,并附上它们的核心特点和适用场景,帮助您选择。一、通用型AI对话助手(编程是核心能力之一)这类工具本质是“更懂代码的ChatGPT”,适合处理广泛的编程问题、解释代码、生成文档等。ChatGPT(GPT-4/4o)简介:行业标杆,尤其在GPT-4版本下,代码理解和生成能力极强。优点:上下文能力强,
  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 10:56
  • 阅读:96
  • 中医考证在线学习小程序系统需求文档
  • 中医考证在线学习小程序系统需求文档
  • 中医考证在线学习小程序系统需求文档文档版本: V1.0目标用户: 中医执业医师、助理医师、确有专长、师承等考证学员核心价值: 利用移动化、碎片化、智能化工具,提升学习效率与考试通过率。1.项目概述1.1项目目标开发一款专为中医考证学员设计的微信小程序,提供从课程学习、题库练习、考点记忆、模考冲刺到学习社区的一站式闭环学习体验。旨在帮助学员充分利用碎片时间,系统化、高效地备考。1.2用户角色学员(主要用
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 10:53
  • 阅读:32
联系客服
源码代售 源码咨询 技术开发 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部