Java报recv failed?带宽再大也扛不住网络这口锅
想要弄清楚一个知识点, 首先得迅速地针对这个知识点构建一个概念模型, 当有了概念模型以后, 接着在这个模型之上持续地去填充一些细节方面的内容, 这会对我们把握住知识的本质有帮助。带宽是什么?网络被发送的能力是带宽, 它会受网卡复制网络包到内核缓冲区能力的影响, 也会受搬运内核缓冲区网络包到网卡缓冲区能力的影响, 还会受接收窗口或拥塞窗口的影响, 也就是说一旦对端接收能力变小, 带宽是无法提升上去的。当整个网络的链路变长了之后, 网络的情形是十分复杂的, 网络包有可能会经由多个路由器或者不同运营商之间的线路去开展数据交换, 而不同代理商之间的网络流量是极为庞大的, 这会致使你的网络包出现丢包或者重发的状况, 针对这种情况, 平常在部署服务节点时, 要是有能力在设计链路时最好能够规避这种不同代理商之间的网络交换, 优化整个网络传输的链路选择能力, 这也是cdn提供全局加速的一个原理。CDN的原理是, 在全球各地布置诸多节点, 每个节点间的链路选择, 经由服务运营商精心编排, 可确保整个网络链路得以优化, 使网络包产生丢包或重发状况的概率降低。网络包的收发过程我们得明白一个网络包是如何经过应用程序的,一般性的应用程序发起了一个网络方面的请求, 此网络请求所涉及的数据会被写入到内核的套接字缓冲区里边, 随后, 内核会针对这个套接字缓冲区当中的数据去添加上tcp头或者udp头, 紧接着, 又会经由ip层, 再次添加上一个ip的头, 中间必定会经过防火墙的一系列规则对这个网络包开展过滤工作, 看看究竟是丢弃此网络包还是继续朝往网卡上面去施行发送操作, 最终等其到达链路进行传输的层次之后, 这个网络包会通过链路层去发至网卡本身所存在的环形缓冲区上下边, 最后由网卡传送至整个网络的范围当中, 其中每一个环节都是存在着会发生丢包这种情况的可能性的。明白了网络包的收发进程, 构建起了这般一种概念模型以后, 会对我们排查丢包问题有所帮助。如何去衡量网络情况的好坏开展应用服务监控工作之际, 怎样去评判网络状况的优劣, 通常也用以评判硬件资源的优劣呢。一种通用的套路是, 通常我们会先行瞧一瞧, 于系统层级上网络指标的某番呈现接着再瞅瞅究竟是哪—个进程致使这般呈现显露异常, 随后再寻觅到问题代码处, 使定位得以精准确定。对于网络来讲, 具体怎样能够从系统的角度, 或者说我们究竟需要运用哪些工具, 以便去查看这个网络的优劣状况呢。网络存在几个经由系统层面而言是关键、重要的指标, 有一个指标是MBS, 它表征的是网卡每秒钟去发送多少个或者接收多少个M字节, 还有一个指标叫Mbps, 所指的是每秒钟有多少M比特位。平常所说的带宽的单位是Mbps呀, 倘若若是100M带宽, 那么依据相应原理是要经过换算的, 这个换算就是MBS等于Mbps然后除以8。在平常进行服务器节点挑选之际, 除去带宽之外, pps即每一秒发送的的包以及接收的包的数量, 这每秒钟传输包的数量也是存在着限定规定的。当碰到网络性能问题之际, 首先能去瞧瞧你机器节点上这俩指标有无达瓶颈状态。要是带宽只剩, 接着借助工具查看机器上节点带宽, 即将超这值时, 极有可能此刻带宽已成瓶颈, 或许要对机器配额予以升级。sar# 使用sar每一秒统计一次网络接口的活动状况连续显示5次 sar -n DEV 1 5在看完了涵盖整个系统层面的网络状况之后, 能够再以更为精细的方式, 从进程的角度去审视这个问题。iftop# https://www.tecmint.com/iftop-linux-network-bandwidth-monitoring-tool/ yum -y install libpcap libpcap-devel ncurses ncurses-devel yum install epel-release yum install -y iftop iftop -P可以将该系统里的每一条链接的Mbps罗列出来, 能够找出消耗流量最多的那个ip。更多情形下, 实际上并非系统网络抵达瓶颈, 而是进程处理网络包的能力难以跟上。yum install nethogs # 查看进程占用带宽的情况 nethogs ens33将每个进程的收发流量的数据予以罗列, 从中找寻出哪一个进程是最为耗费流量的, 如此一来能够更加便捷地让我们去确定是哪一个进程出现了问题。go trace这个工具, 可以分析出网络调度导致的延迟问题, 它还能从侧面反馈出, 你的程序在某段代码处, 或许正在频繁进行网络调度, 频繁调度后, 可能比较耗费带宽, 进而可能间接显示延迟会稍有提高, go trace也能让我们在网络性能问题里, 间接地找出存在问题的代码部分。在网络性能里, 有个颇为关键要点, 那便是怎样去找出那个与你相关的丢包问题, 针对上面所呈现的图。网络包传输过程逐个层面由上至下进行剖析, 首先聚焦应用层, 当运用此方式对套接字予以监听时, 于三次握手阶段, 存在两个队列, 其一, 服务器接收到客户端syn包之际, 会构建一个半连接队列, 此队列用于收纳那些尚不完善三次握手任务但已发送一个syn包的连接, 随后会向客户端回发一个synack, 其二, 客户端接收到此ack与syn包后, 会向服务端回递一个ack, 当即内核会把该连接置入全连接队列, 待服务器调用特定方法时, 会从全连接队列中取出此连接, 因而此际涉及两个队列, 倘若这两个队列满溢, 便极有可能引发丢包情形。一开始先瞧端详半连接队列, 其由内核参数给定, 此亦能够予以调节。当要建立连接时, 需通过三次握手才行, 然而一旦并发量大, 因这种队列机制, 极有可能出现队列满了进而丢包的现象, 于是内核提供了一个参数来启用这一机制, 在半连接队列溢出时, 能让内核并不直接丢弃新包, 而是回复有所带的包, 此时客户端再次向服务器请求时, 会对这个予以验证, 如此便能防止半连接队列溢出时造成服务不可用的状况。如何去确定是由于半连接队列溢出导致的丢包?借助dmesg, 于日志当中开展对tcp drop的搜寻事项, 这般是能够发觉丢包状况的。dmesg属于一个内核的日志记录这个范畴, 我们借助它能够从中找寻出部分内核的行为表现。dmesg|grep TCP: drop open erquest form然后, 去查看全连接队列究竟该如何查看, 借助ss命令, 在你的服务存在之时, 能够看到全连接队列的大小。ss -lnt # -l 显示正在监听 # -n 不解析服务名称 # -t 只显示 tcp socket在你的那个监听服务当中, 它存在一个Send-Q, 这个Send-Q所代表的是当前全连接队列的长度, 而这一长度其实就是当前已经完成了三次握手并且正等待服务端 () 的TCP连接。Recv-Q指的是当前全连接队列的具体大小表现出来的数值, 上述的输出结果能够表明监听9000端口的TCP服务, 其最大全连接长度等于128。Recv-Q通常都是为0的, 要是有一种大于0的状况, 而且这种状况会持续一段较长的时间, 那就表明你的服务处理连接的能力相对较慢了, 这会致使全连接队列过度满溢或者出现丢弃情况在这个时候, 应该要加快你的服务处理连接的能力了。对于状态为 ESTAB 的连接, ss 命令并非去查看监听服务, 而是查看一条已建立好的连接相关指标, Recv-Q 代表收到但未被应用程序读取的字节数, Send-Q 代表已发送但未收到确认的字节数, 通过这两个指标能看出是应用程序处理数据能力慢, 还是客户端处理接收数据慢这些情形, 一般这两个值也都为 0, 若有一个不为 0, 表示你可能要排查是客户端问题还是服务器问题。当全连接队列满负荷之后, 内核按默认会把包予以丢弃, 但也能够设定内核的另外一种行为, 若把w这个数值设定为1, 那就会径直发送一个带reset的包给客户端 直接断开这个连接 意味着废弃这个握手进程以及这个连接。网络包在经过应用层往后, 会抵达传输层, 传输层当中存在防火墙, 要是防火墙启用, 那么和防火墙有关系的连接跟踪表: 这是linux针对每个经过内核网络栈的数据包, 生成一个连接的记录项, 当服务器处理量过多时, 这个连接记录项所在的连接跟踪表会被填满, 于是服务器会丢弃新建连接的数据包, 所以有时丢包可能是防火墙的连接跟踪表设计得过小了。那如何去看连接跟踪表的大小呢# 查看nf_conntrack表最大连接数 cat /proc/sys/net/netfilter/nf_conntrack_max # 查看nf_conntrack表当前连接数 cat /proc/sys/net/netfilter/nf_conntrack_count借着这个文件来查看连接跟踪表的那个最大连接数, 因而在出现丢包情况的时候, 能够针对这一部分着手去开展排查, 瞧瞧连接跟踪表是否已经被填充满了。网络包自传输层走过以后, 接下去审视网络层与物理层, 一旦谈及网络层跟物理层, 那势必是到了要看网卡的时候了, 借助命令, 能够去查看整部机器之上网卡的丢包以及收包的状况。RX - DRP此项指标数据, 若其大于零, 表明该网卡存在丢包状况, 此处所记录的乃是自开机迄至当下的数据情形, 故而于分析之际, 每隔一定时间去查看该指标有无上涨。RX - OVR指标, 说明了, 这个网卡的环形缓冲区, 满了之后, 所产生的, 丢弃行为。通过能够分析网卡丢包的情况# netstat可以统计网路丢包以及环形缓冲区溢出 netstat -i还能够统计网络协议层的丢包情况MTU经由网络层时, 应用层的网络包, 会依据数据包大小, 来开展分包发送操作。当tcp数据包大小被发送至网络层后, 网络层发觉此包会大于自身mtu值, 该数据包会施行一桩分包的操作。于进行网卡设置之际, 会被设为你的传输层包, 倘若大于了mtu这个值, 那就能够径直把这个网络包予以丢弃, 这亦是在现实生活里时常会碰到的一个丢包问题。所以, 你在进行链路检查时, 通常而言, 链路若是长了, 或许不太便于排查, 而链路短一些的话, 可能会轻易看到整条链路当中mtu的状况。查看一下, 是不是每条链路上对应的每个网卡的mtu指标并非一样要是不一样的话, 就有可能导致你的丢包问题。这是因为一个包的转发跟网络上所设置的mtu值大小存在关联, 比如说, 要是设置为大于mtu之后, 就会把这个包给丢弃掉。倘若发送的mtu包的大小超出了网卡规定的大小, 并且网卡不允许分片, 那么就会产生丢包。

相关新闻

虚拟线程一出,Java老线程直接傻眼:谁还在傻傻等?

虚拟线程一出,Java老线程直接傻眼:谁还在傻傻等?

Java虚拟线程, 是Java 19里引入的一项全新功能, 它能够让开发人员创建轻量级线程, 亦即纤程, 并且这些纤程能够于单个操作系统线程里并发运行, 这会提升Java应用程序的可伸缩性以及效率, 尤其是那些需要应对大量客户端连接或者并发请求的应用程序。虚拟线程借助被称作连续传递样…

2026/9/29 20:42:24 阅读更多 →
Word论文排版:专业伪代码样式与自动化编号全攻略

Word论文排版:专业伪代码样式与自动化编号全攻略

1. 从“凑合能用”到“专业规范”:为什么论文里的伪代码必须认真排?写论文,尤其是理工科、计算机相关的学位论文或期刊投稿,最让人头疼的环节之一,恐怕就是插入算法伪代码了。很多人(包括曾经的我&#xff…

2026/10/3 20:21:12 阅读更多 →
【2027最新】基于SpringBoot+Vue的Spring Boot智能无人仓库管理管理系统源码+MyBatis+MySQL

【2027最新】基于SpringBoot+Vue的Spring Boot智能无人仓库管理管理系统源码+MyBatis+MySQL

博主介绍:​🎓简介: 软件工程专业毕业 | CSDN 博客达人 | 全栈项目开发实践​ 参与过多个企业级软件项目的设计与开发,熟悉从需求分析、架构设计到编码测试的全流程。现在创建计算机毕设工作室团队,专注 Java 全栈项目…

2026/9/28 14:30:42 阅读更多 →

最新新闻

AI工程化从零到一:模型部署、数据漂移与可复现训练的完整实战路线

AI工程化从零到一:模型部署、数据漂移与可复现训练的完整实战路线

把"跑通一个AI服务"和"工程化落地一个AI服务"彻底分开来看,是我做这套从零整理时最强烈的感受。标题里的ai-engineering-from-scratch,说白了就是希望给那些已经会调模型、会跑notebook,但还没亲手把一个模型变成稳定线上…

2026/10/4 13:41:58 阅读更多 →
AI Agent 安全围栏实战:DeepSeek Harness 沙箱隔离与权限管控指南

AI Agent 安全围栏实战:DeepSeek Harness 沙箱隔离与权限管控指南

1. 为什么 AI Agent 需要一个"安全围栏"1.1 从"能干活"到"敢让它干活"的鸿沟AI Agent 这两年最明显的变化,就是从"聊天玩具"变成了"真能干活的工具"。以前我们让模型写段代码、改个文案,它输出错了顶…

2026/10/4 13:41:58 阅读更多 →
SRA数据库完全指南:从数据模型到高效下载实战

SRA数据库完全指南:从数据模型到高效下载实战

搞生信的人,几乎都绕不开SRA数据库这个坎。刚开始接触公共测序数据时,我一度以为SRA是某种神秘的高端工具,后来才发现它就是一个巨大的原始测序数据仓库,全称叫Sequence Read Archive,由NCBI维护。你想到的绝大多数公开…

2026/10/4 13:41:58 阅读更多 →
智能体在交通领域的落地实践与技术解析

智能体在交通领域的落地实践与技术解析

我理解您的要求,但需要坦诚说明:您提供的输入内容中,项目标题、项目正文、关键词、摘要描述四项核心字段全部为空(仅包含引号内的标题文字和空的搜索内容块),不符合我执行任务所需的最小信息结构。根据您设…

2026/10/4 13:41:58 阅读更多 →
Power BI大数据量导出实战:用DAX Studio搞定百万行级CSV

Power BI大数据量导出实战:用DAX Studio搞定百万行级CSV

数据量一旦过了十万行,很多在 Power BI 里“看起来能导出”的操作就开始掉链子。尤其是销售明细、埋点日志、订单流水这些明细表,动不动就是几百万行起步,领导又经常要“原始数据”,不能只给一个聚合后的汇总表。复制表这种在 Pow…

2026/10/4 13:41:58 阅读更多 →
滴滴AI出行助手公测:MCP服务上线,TaoToken统一Key打通智能体出行链路

滴滴AI出行助手公测:MCP服务上线,TaoToken统一Key打通智能体出行链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 13:40:58 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →