深度解析 Linux 内核参数 net.ipv4.tcp_rmem:优化网络性能的关键

文章目录

    • 引言
    • 一、认识 net.ipv4.tcp_rmem
      • 1. 最小值(min)
      • 2. 默认值(default)
      • 3. 最大值(max)
    • 二、net.ipv4.tcp_rmem 的工作原理
    • 三、net.ipv4.tcp_rmem 的实际应用场景
      • 1. 高并发 Web 服务器
      • 2. 文件传输服务
      • 3. 实时通信应用
    • 四、如何调整 net.ipv4.tcp_rmem
      • 1. 查看当前设置
      • 2. 临时调整
      • 3. 永久修改
    • 五、调整 net.ipv4.tcp_rmem 的注意事项
      • 1. 内存资源限制
      • 2. 网络环境适配
      • 3. 与其他参数的协同
    • 六、实操
      • 打流方向
      • 默认值
        • TCP 窗口大小
        • 流速
        • 网速
      • 减小接收缓存
        • TCP 窗口大小
          • 警告
          • 分析
        • 流速
        • 网速
    • 七、总结​

引言

在 Linux 系统庞大的内核参数体系中,net.ipv4.tcp_rmem 是一个对网络性能有着重要影响的参数。无论是搭建高并发的 Web 服务器,还是优化网络应用程序的传输效率,深入了解并合理配置 net.ipv4.tcp_rmem 都能带来显著的性能提升。接下来,我们就一同深入探究这个参数的奥秘。

一、认识 net.ipv4.tcp_rmem

net.ipv4.tcp_rmem 是用于控制 TCP 套接字接收缓冲区大小的内核参数。在网络通信中,接收缓冲区扮演着至关重要的角色,它负责暂存从网络上接收到的数据,直到应用程序读取这些数据。而 net.ipv4.tcp_rmem 并非是一个单一的值,它由三个整数值组成,分别表示最小值(min)、默认值(default)和最大值(max),其格式为 net.ipv4.tcp_rmem = min default max

1. 最小值(min)

最小值定义了 TCP 接收缓冲区能够分配的最小字节数。即使在系统资源紧张的情况下,每个 TCP 套接字的接收缓冲区也不会小于这个值。设置合理的最小值可以确保基本的网络通信能够正常进行,避免因缓冲区过小而导致数据丢失或通信异常。例如,在一些对网络稳定性要求较高的实时通信场景中,合适的最小值能保障数据的可靠接收。

2. 默认值(default)

默认值是系统在创建 TCP 套接字时,为接收缓冲区分配的初始大小。在大多数情况下,系统默认的设置能够满足一般的网络应用需求。然而,当涉及到高带宽、大数据量传输的场景时,默认值可能无法充分发挥网络性能,这时就需要根据实际情况进行调整。

3. 最大值(max)

最大值限定了 TCP 接收缓冲区可增长到的最大字节数。在网络传输过程中,如果网络带宽充足且有大量数据需要接收,接收缓冲区会自动扩展,但不会超过这个最大值。合理设置最大值可以充分利用网络资源,提高数据传输效率,但如果设置过大,可能会占用过多的系统内存资源,影响其他进程的运行。

二、net.ipv4.tcp_rmem 的工作原理

当一个 TCP 连接建立时,系统会按照 net.ipv4.tcp_rmem 设置的默认值为该连接的接收缓冲区分配内存空间。随着数据从网络上不断接收,接收缓冲区中的数据量逐渐增加。如果数据接收速度较快,而应用程序读取数据的速度较慢,接收缓冲区会逐渐填满。当缓冲区接近满载时,TCP 协议会通过流量控制机制,通知发送方减缓数据发送速度,以避免缓冲区溢出导致数据丢失。

在某些情况下,如网络带宽突然增大或有大量数据突发传输时,接收缓冲区会根据需要自动扩展,直到达到最大值。而当应用程序开始读取缓冲区中的数据,缓冲区中的数据量减少,系统会根据一定的策略释放多余的内存,使缓冲区大小保持在合理范围内。

三、net.ipv4.tcp_rmem 的实际应用场景

1. 高并发 Web 服务器

在高并发的 Web 服务器环境中,大量的客户端同时向服务器发起请求并传输数据。如果 net.ipv4.tcp_rmem 设置不合理,可能会导致服务器接收数据缓慢,响应延迟增加,甚至出现连接超时等问题。通过适当增大 net.ipv4.tcp_rmem 的默认值和最大值,可以使服务器能够更快地接收和处理客户端发送的数据,提高服务器的并发处理能力和响应速度,为用户提供更流畅的访问体验。例如,在处理大量图片、视频等大文件传输的 Web 应用中,优化该参数能显著提升传输效率。

2. 文件传输服务

对于 FTP、SFTP 等文件传输服务,合理配置 net.ipv4.tcp_rmem 可以加快文件的传输速度。在传输大文件时,如果接收缓冲区过小,文件数据需要频繁地在缓冲区和应用程序之间传输,增加了数据传输的开销。适当增大缓冲区大小,可以减少数据传输的次数,提高文件传输的效率。比如在企业内部进行大规模文件备份或分发时,优化该参数能够大幅缩短传输时间。

3. 实时通信应用

在视频会议、语音通话等实时通信应用中,对数据的实时性和稳定性要求极高。如果接收缓冲区设置不当,可能会导致数据丢失、音视频卡顿等问题。通过精确调整 net.ipv4.tcp_rmem,可以确保接收缓冲区既能容纳一定量的突发数据,又不会因为过大的缓冲区而引入过多的延迟,从而保证实时通信的流畅性和质量。

四、如何调整 net.ipv4.tcp_rmem

1. 查看当前设置

在 Linux 系统中,可以通过以下命令查看 net.ipv4.tcp_rmem 的当前设置:

sysctl net.ipv4.tcp_rmem

执行该命令后,系统会输出类似以下内容:

net.ipv4.tcp_rmem = 4096 131072 6291456

这表示当前系统中,TCP 接收缓冲区的最小值为 4096 字节,默认值为 131072 字节,最大值为 6291456 字节。

2. 临时调整

如果只是想临时修改 net.ipv4.tcp_rmem 的值,可以使用 sysctl 命令直接设置,例如:

sudo sysctl -w net.ipv4.tcp_rmem="8192 262144 12582912"

上述命令将 TCP 接收缓冲区的最小值设置为 8192 字节,默认值设置为 262144 字节,最大值设置为 12582912 字节。需要注意的是,这种临时调整在系统重启后会失效。

3. 永久修改

要实现永久修改 net.ipv4.tcp_rmem 的值,需要编辑 /etc/sysctl.conf 文件。打开该文件,在末尾添加或修改以下内容:

net.ipv4.tcp_rmem = 8192 262144 12582912

保存文件后,执行 sudo sysctl -p 命令使修改生效。这样,系统在每次启动时都会按照新的设置来配置 net.ipv4.tcp_rmem

五、调整 net.ipv4.tcp_rmem 的注意事项

1. 内存资源限制

增大 net.ipv4.tcp_rmem 的值会占用更多的系统内存资源。在调整参数时,需要充分考虑系统的内存容量,避免因设置过大导致系统内存不足,影响其他进程的正常运行。特别是在内存资源有限的服务器或嵌入式设备上,更要谨慎调整。

2. 网络环境适配

不同的网络环境对 net.ipv4.tcp_rmem 的要求不同。例如,在高带宽、低延迟的网络环境中,可以适当增大缓冲区大小以充分利用网络资源;而在带宽较低、延迟较高的网络环境中,过大的缓冲区可能会导致数据传输延迟增加,反而降低性能。因此,在调整参数前,需要对网络环境进行评估,并进行多次测试和优化。

3. 与其他参数的协同

net.ipv4.tcp_rmem 并不是孤立的参数,它与其他网络相关的内核参数(如 net.ipv4.tcp_wmem 控制发送缓冲区大小、net.core.rmem_max 限制所有套接字接收缓冲区的最大值等)相互关联、相互影响。在调整 net.ipv4.tcp_rmem 时,还需要综合考虑其他相关参数的设置,确保整个网络性能的优化达到最佳效果。

net.ipv4.tcp_rmem 作为 Linux 内核中影响网络性能的关键参数,通过深入理解其原理并结合实际应用场景进行合理配置,能够有效提升网络传输效率,满足不同场景下的网络需求。希望通过本文的介绍,能帮助你更好地掌握和运用这个重要的内核参数,让你的 Linux 系统在网络环境中发挥出更强大的性能。

六、实操

打流方向

192.168.37.21(PC)–> 192.168.37.37(Nvidia Orin)

默认值

nvidia@ubuntu:~$ sudo sysctl net.ipv4.tcp_rmem
net.ipv4.tcp_rmem = 4096        131072  6291456
TCP 窗口大小

在这里插入图片描述

打流时窗口大小为 2737152

流速

在这里插入图片描述
流速比较均匀:
大小均匀:每包都是65226字节
间隔均匀:每 0.3ms~0.7ms 间隔发送一个包

网速

在这里插入图片描述
927Mbps

减小接收缓存

sudo sysctl -w net.ipv4.tcp_rmem=“4096 4096 4096”

TCP 窗口大小

在这里插入图片描述
打流时窗口大小为 2048

警告

[Expert Info (Warning/Sequence): TCP window specified by the receiver is now completely full]
意味着接收方的 TCP 接收窗口已经完全满了。这是一个重要的网络性能和流量控制相关的警告,表明接收方的缓冲区已经没有空间来接收更多的数据了。

分析
  • PC 发送 1090 字节给 Orin
  • Orin 没有回复 Ack
  • PC 再次发送 1090 字节给 Orin 时,
    • 就知道 Orin 缓冲区满了,发出警告
    • 并且等到 Orin 回复 Ack 后,PC 才开始发送下个包
    • 所以打流速率被 Orin 的缓冲区限制了
    • 打流速率瓶颈在于 Orin 接收缓冲区
流速

流速不均匀
大小均匀:每包都是1090字节
间隔不均匀:

  • 4100 到 4101 间隔 0.002ms
  • 4101 到 4103 间隔 0.25ms
    • 时间间隔长,是受限于 4102(Orin 回复给 PC 一个 Ack,说明已经处理好了一个包,目前缓冲区有空间了,PC 可以继续发包了)
网速

在这里插入图片描述
95Mbps

七、总结​

net.ipv4.tcp_rmem 作为 Linux 内核中调控 TCP 接收缓冲区的核心参数,其最小值、默认值与最大值的设置直接影响着网络数据传输的效率与稳定性。从高并发 Web 服务器快速响应请求,到实时通信应用保障流畅体验,合理配置该参数能显著提升网络性能。减小缓存导致网速降低的实例,更直观地揭示了参数设置不当带来的负面影响 —— 过小的缓冲区会频繁触发流量控制,严重制约数据传输速率,即便节省了内存资源,却牺牲了网络性能。​
这也进一步印证了调整 net.ipv4.tcp_rmem 时需遵循的关键原则:既要依据网络应用场景与环境特点,精准权衡内存占用与传输效率的关系,又要综合考量与其他网络参数的协同作用。唯有通过不断实践与优化,才能让 net.ipv4.tcp_rmem 成为释放 Linux 系统网络潜力的有力工具,满足多样化的网络需求 。

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

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

相关文章

Windmill:开源开发者基础设施的革命者

前言 在企业内部,开发者经常需要构建各种内部工具来支持业务运营、数据分析和系统管理。这些工具通常需要前端界面、后端逻辑和工作流编排,开发过程繁琐且耗时。今天要介绍的Windmill项目,正是为解决这一痛点而生,它让构建内部工具变得简单高效,堪称开发者的得力助手。 …

国产化Excel处理组件Spire.XLS教程:用 Java 获取所有 Excel 工作表名称(图文详解)

在 Excel 中,工作表名称通常能够反映其用途或所含内容,提取这些名称有助于理清整个工作簿的结构。对于新用户或协作者来说,仅凭这些名称就能快速掌握各表中的数据类型。本文将演示如何使用 Java 获取 Excel 文件中的所有工作表名称&#xff0…

day49python打卡

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 最近临近毕业,事情有点多。如果有之前的基础的话,今天的难度相对较低。 后面说完几种模块提取特征的组合方式后,会提供整理的开源模块的文件。 现在大家已近可以去读这类…

day27-shell编程(自动化)

1. 准备工具 添加到/etc/vimrc autocmd BufNewFile *.py,*.cc,*.sh,*.java,*.bash,Dockerfile,docker-compose.yml exec ":call SetTitle()"func SetTitle() if expand("%:e") ~ sh\|bash call setline(1,"#!/bin/bash")call setline(2, &quo…

【免杀】C2免杀技术(十五)shellcode混淆uuid/ipv6/mac

针对 shellcode 混淆(Shellcode Obfuscation) 的实战手段还有很多,如下表所示: 类型举例目的编码 / 加密XOR、AES、RC4、Base64、Poly1305、UUID、IP/MAC改变字节特征,避开静态签名或 YARA结构伪装PE Stub、GIF/PNG 嵌入、RTF OLE、UUID、IP/MAC看起来像合法文件/数据,弱…

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…

记录一次opengl显示不出物体的错误原因

是这样的,我打算学PBR中的IBL章节,即基于图像的渲染,它的观点是创建一个大的外景图片,可以根据图像中的信息来将环境中的漫反射光和镜面反射光打在物体上。 但是我在我的程序中创建了一个立方体作为天空盒,我是有两套…

国产录播一体机:科技赋能智慧教育信息化

在数字化时代,教育正经历着前所未有的变革。国产工控机作为信息化教育的核心载体,正在重新定义学习方式,赋能教师与学生,打造高效、互动、智能的教学环境,让我们一起感受科技与教育的深度融合!高能计算机推…

Android Native 之 lmkd进程和kernel kswapd的关联

lwkd进程属于native层启动的一个守护进程,他的作用贯穿android世界的始终。他的另外一个大家都属于的名字lowmemorykiller。 根据readme的介绍lmkd是用来对android系统内存检查的守护进程,它通过终止不重要的进程来达到系统稳定运行的状态。在Linux Kern…

【生活】程序员防猝si指南

note 一、定期体检二、均衡饮食,多食用对心脏有保护作用的食物三、每周运动四、减压五、保证睡眠六、戒烟限酒7、控制血压8、警惕流感攻击心脏9、关注牙齿健康10、不要抵触吃药 文章目录 note一、定期体检二、均衡饮食,多食用对心脏有保护作用的食物三、…

245. 2019年蓝桥杯国赛 - 数正方形(困难)- 递推

245. 数正方形(困难) 2019年蓝桥杯国赛 - 数正方形(困难) 标签:2019 国赛 递推 题目描述 在一个 N N N N N N 的点阵上,取其中 4 个点恰好组成一个正方形的 4 个顶点,一共有多少种不同的取…

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…

SpringBoot EhCache 缓存

一、EhCache核心原理 层级存储 堆内缓存(Heap):高速访问,受JVM内存限制堆外缓存(Off-Heap):突破JVM堆大小限制(直接内存)磁盘存储(Disk)&#xff…

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…

数据通信与计算机网络——数据与信号

主要内容 模拟与数字 周期模拟信号 数字信号 传输减损 数据速率限制 性能 注:数据必须被转换成电磁信号才能进行传输。 一、模拟与数字 数据以及表示数据的信号可以使用模拟或者数字的形式。数据可以是模拟的也可以是数字的,模拟数据是连续的采用…

循环语句之while

While语句包括一个循环条件和一段代码块&#xff0c;只要条件为真&#xff0c;就不断 循环执行代码块。 1 2 3 while (条件) { 语句 ; } var i 0; while (i < 100) {console.log(i 当前为&#xff1a; i); i i 1; } 下面的例子是一个无限循环&#xff0c;因…

蓝桥杯第十届国B 质数拆分

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 将 2019 拆分为若干个两两不同的质数之和&#xff0c;一共有多少种不同的方法&#xff1f; 注意交换顺序视为同一种方法&#xff0c;例如 220172019 与 201722019 …

曼昆《经济学原理》第九版 第十二章税收制度的设计

一、税收基本概念 税收分类&#xff1a; 比例税&#xff1a;税率不随税基变化&#xff08;如部分增值税&#xff09;累进税&#xff1a;税率随税基增加而上升&#xff08;如个人所得税&#xff09;累退税&#xff1a;税率随税基增加而下降&#xff08;如社会保险税上限&#…

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…