深度解析 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
繁體地址,請注明出處:http://hk.pswp.cn/web/83106.shtml
英文地址,請注明出處:http://en.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 項目…