詳解TCP中的tcp_mem、tcp_rmem、tcp_wmem定義及計算方式


轉載,閱讀原文:http://www.zxsdw.com/index.php/archives/1564/

其他參考:https://www.cnblogs.com/zengkefu/p/5749009.html

tcp_mem:單位是page,此值是動態的,linux根據機器自身內存情況進行分配
可根據張小三資源網centos性能優化那篇文章里查看查詢方式。

最小:在這個頁數之下,TCP不擔心它的內存需求。
壓力:當TCP分配的內存量超過此頁數時,TCP將減緩其內存消耗並進入內存壓力模式,當內存消耗低於“min”時,該模式將退出。
最大:所有TCP套接字允許排隊的頁面數。超出則打印Out of socket memory
假設一個page大小是4K
net.ipv4.tcp_mem = 196608 262144 393216   # 設置page數,* 4k 即是內存數值
那么對應的內存分配就是:768M 1G 1.5G
內存為1G時進入壓力模式
大於TCP套接字允許排隊的頁面數則打印。

tcp_rmem:單位是字節 接收緩存區大小,緩存從對端接收的數據,后續會被應用程序讀取

最小:默認值4K,TCP套接字使用的接收緩沖區的最小大小。即使在中等的內存壓力下,它也能保證連接到每個TCP套接字。
默認:默認值87380字節,TCP套接字使用的接收緩沖區的初始大小。此值覆蓋net.core.rmem默認值。此值將導致窗口為65535,默認設置為tcp_adv_win_scale和tcp_app_win:0,默認設置為tcp_app_win時,窗口會小一些。
最大:介於87380字節和6MB之間,取決RAM大小。TCP套接字接收器允許接收緩沖區的最大大小,此值不會覆蓋net.core.rmem_max。使用SO_RCVBUF調用setsockopt()將禁用該套接字的接收緩沖區大小的自動調整,在這種情況下,將忽略此值。

tcp_wmem:單位字節 發送緩存區大小,緩存應用程序的數據,有序列號被應答確認的數據會從發送緩沖區刪除掉。

最小:默認4K,為TCP套接字的發送緩沖區保留的內存量。每個TCP套接字由於其誕生的事實而有權使用它。
默認:最大16K,自動調整。TCP套接字使用的發送緩沖區的初始大小。此值將覆蓋net.core.wmem_default,通常低於net.core.wmem_default。
最大:介於64K和4MB之間,具體取決於RAM大小。TCP套接字的發送緩沖區所允許的最大內存量。此值不會覆蓋net.core.wmem_max。使用SO_SNDBUF調用setsockopt()會禁用該套接字的發送緩沖區大小的自動調整,在這種情況下該值將被忽略。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM