Linux內核Socket參數調優

可調優的內核變量存在兩種主要接口:sysctl命令和/proc文件系統,proc中與進程無關的所有信息都被移植到sysfs中。IPV4協議棧的sysctl參數主要是sysctl.net.core、sysctl.net.ipv4,對應的/proc文件系統是/proc/sys/net/ipv4和/proc/sys/net/core。只有內核在編譯時包含了特定的屬性,該參數才會出現在內核中。

? ? 對于內核參數應該謹慎調節,這些參數通常會影響到系統的整體性能。內核在啟動時會根據系統的資源情況來初始化特定的變量,這種初始化的調節一般會滿足通常的性能需求。

? ? 應用程序通過socket系統調用和遠程主機進行通訊,每一個socket都有一個讀寫緩沖區。讀緩沖區保存了遠程主機發送過來的數據,如果緩沖區已滿,則數據會被丟棄,寫緩沖期保存了要發送到遠程主機的數據,如果寫緩沖區已慢,則系統的應用程序在寫入數據時會阻塞。可知,緩沖區是有大小的。

socket緩沖區默認大小:
/proc/sys/net/core/rmem_default ? ? 對應net.core.rmem_default
/proc/sys/net/core/wmem_default ? ? 對應net.core.wmem_default
? ? 上面是各種類型socket的默認讀寫緩沖區大小,然而對于特定類型的socket則可以設置獨立的值覆蓋默認值大小。例如tcp類型的socket就可以用/proc/sys/net/ipv4/tcp_rmem和tcp_wmem來覆蓋。

socket緩沖區最大值:
/proc/sys/net/core/rmem_max ? ? ? ?對應net.core.rmem_max
/proc/sys/net/core/wmem_max ? ? ? ?對應net.core.wmem_max

/proc/sys/net/core/netdev_max_backlog ? ?對應 net.core.netdev_max_backlog
? ? 該參數定義了當接口收到包的速率大于內核處理包的速率時,設備的輸入隊列中的最大報文數。

/proc/sys/net/core/somaxconn ? ? ? ?對應 net.core.somaxconn
? ? 通過listen系統調用可以指定的最大accept隊列backlog,當排隊的請求連接大于該值時,后續進來的請求連接會被丟棄。

/proc/sys/net/core/optmem_max ? ? ? ? ?對應 net.core.optmem_max
? ? 每個socket的副緩沖區大小。

TCP/IPV4內核參數:
? ? 在創建socket的時候會指定socke協議和地址類型。TCP socket緩沖區大小是他自己控制而不是由core內核緩沖區控制。
/proc/sys/net/ipv4/tcp_rmem ? ? 對應net.ipv4.tcp_rmem
/proc/sys/net/ipv4/tcp_wmem ? ? 對應net.ipv4.tcp_wmem
? ? 以上是TCP socket的讀寫緩沖區的設置,每一項里面都有三個值,第一個值是緩沖區最小值,中間值是緩沖區的默認值,最后一個是緩沖區的最大值,雖然緩沖區的值不受core緩沖區的值的限制,但是緩沖區的最大值仍舊受限于core的最大值。

/proc/sys/net/ipv4/tcp_mem ?
? ? 該內核參數也是包括三個值,用來定義內存管理的范圍,第一個值的意思是當page數低于該值時,TCP并不認為他為內存壓力,第二個值是進入內存的壓力區域時所達到的頁數,第三個值是所有TCP sockets所允許使用的最大page數,超過該值后,會丟棄后續報文。page是以頁面為單位的,為系統中socket全局分配的內存容量。

socket的結構如下圖:

/proc/sys/net/ipv4/tcp_window_scaling ? ? ?對應net.ipv4.tcp_window_scaling
? ? 管理TCP的窗口縮放特性,因為在tcp頭部中聲明接收緩沖區的長度為26位,因此窗口不能大于64K,如果大于64K,就要打開窗口縮放。

/proc/sys/net/ipv4/tcp_sack ? ?對應net.ipv4.tcp_sack
? ? 管理TCP的選擇性應答,允許接收端向發送端傳遞關于字節流中丟失的序列號,減少了段丟失時需要重傳的段數目,當段丟失頻繁時,sack是很有益的。

/proc/sys/net/ipv4/tcp_dsack ? 對應net.ipv4.tcp_dsack
? ? 是對sack的改進,能夠檢測不必要的重傳。

/proc/sys/net/ipv4/tcp_fack ? ?對應net.ipv4.tcp_fack
? ? 對sack協議加以完善,改進tcp的擁塞控制機制。

TCP的連接管理:
/proc/sys/net/ipv4/tcp_max_syn_backlog ? ?對應net.ipv4.tcp_max_syn_backlog
? ? 每一個連接請求(SYN報文)都需要排隊,直至本地服務器接收,該變量就是控制每個端口的 TCP SYN隊列長度的。如果連接請求多余該值,則請求會被丟棄。

/proc/sys/net/ipv4/tcp_syn_retries ? ?對應net.ipv4.tcp_syn_retries
? ? 控制內核向某個輸入的SYN/ACK段重新發送相應的次數,低值可以更好的檢測到遠程主機的連接失敗。可以修改為3

/proc/sys/net/ipv4/tcp_retries1 ? ?對應net.ipv4.tcp_retries1
? ? 該變量設置放棄回應一個tcp連接請求前,需要進行多少次重試。

/proc/sys/net/ipv4/tcp_retries2 ? ?對應net.ipv4.tcp_retries2
? ? 控制內核向已經建立連接的遠程主機重新發送數據的次數,低值可以更早的檢測到與遠程主機失效的連接,因此服務器可以更快的釋放該連接,可以修改為5

TCP連接的保持:
/proc/sys/net/ipv4/tcp_keepalive_time ? ? ? ?對應net.ipv4.tcp_keepalive_time
? ? 如果在該參數指定的秒數內連接始終處于空閑狀態,則內核向客戶端發起對該主機的探測

/proc/sys/net/ipv4/tcp_keepalive_intvl ? ?對應net.ipv4.tcp_keepalive_intvl
? ? 該參數以秒為單位,規定內核向遠程主機發送探測指針的時間間隔

/proc/sys/net/ipv4/tcp_keepalive_probes ? 對應net.ipv4.tcp_keepalive_probes
? ? 該參數規定內核為了檢測遠程主機的存活而發送的探測指針的數量,如果探測指針的數量已經使用完畢仍舊沒有得到客戶端的響應,即斷定客戶端不可達,關閉與該客戶端的連接,釋放相關資源。

/proc/sys/net/ipv4/ip_local_port_range ? 對應net.ipv4.ip_local_port_range
? ? 規定了tcp/udp可用的本地端口的范圍。

TCP連接的回收:
/proc/sys/net/ipv4/tcp_max_tw_buckets ? ? 對應net.ipv4.tcp_max_tw_buckets
? ?該參數設置系統的TIME_WAIT的數量,如果超過默認值則會被立即清除。

/proc/sys/net/ipv4/tcp_tw_reuse ? ? ? ? ? 對應net.ipv4.tcp_tw_reuse
? ?該參數設置TIME_WAIT重用,可以讓處于TIME_WAIT的連接用于新的tcp連接

/proc/sys/net/ipv4/tcp_tw_recycle ? ? ? ? 對應net.ipv4.tcp_tw_recycle
? ?該參數設置tcp連接中TIME_WAIT的快速回收。

/proc/sys/net/ipv4/tcp_fin_timeout ? ? ? 對應net.ipv4.tcp_fin_timeout
? ?設置TIME_WAIT2進入CLOSED的等待時間。

/proc/sys/net/ipv4/route/max_size
? ?內核所允許的最大路由數目。

/proc/sys/net/ipv4/ip_forward
? ?接口間轉發報文

/proc/sys/net/ipv4/ip_default_ttl
? ?報文可以經過的最大跳數

虛擬內存參數:
/proc/sys/vm/


? ?在linux kernel 2.6.25之前通過ulimit -n(setrlimit(RLIMIT_NOFILE))設置每個進程的最大打開文件句柄數不能超過NR_OPEN(1024*1024),也就是100多w(除非重新編譯內核),而在25之后,內核導出了一個sys接口可以修改這個最大值/proc/sys/fs/nr_open。shell里不能直接更改,是因為登錄的時候pam已經從limits.conf中設置了上限,ulimit命令只能在低于上限的范圍內發揮了。

Linux中查看socket狀態:
cat /proc/net/sockstat #(這個是ipv4的)

sockets: used 137
TCP: inuse 49 orphan 0 tw 3272 alloc 52 mem 46
UDP: inuse 1 mem 0
RAW: inuse 0
FRAG: inuse 0 memory 0
說明:
sockets: used:已使用的所有協議套接字總量
TCP: inuse:正在使用(正在偵聽)的TCP套接字數量。其值≤ netstat –lnt | grep ^tcp | wc –l
TCP: orphan:無主(不屬于任何進程)的TCP連接數(無用、待銷毀的TCP socket數)
TCP: tw:等待關閉的TCP連接數。其值等于netstat –ant | grep TIME_WAIT | wc –l
TCP:alloc(allocated):已分配(已建立、已申請到sk_buff)的TCP套接字數量。其值等于netstat –ant | grep ^tcp | wc –l
TCP:mem:套接字緩沖區使用量(單位不詳。用scp實測,速度在4803.9kB/s時:其值=11,netstat –ant 中相應的22端口的Recv-Q=0,Send-Q≈400)
UDP:inuse:正在使用的UDP套接字數量
RAW:
FRAG:使用的IP段數量

轉自:http://blog.chinaunix.net/uid-9688646-id-4049599.html

轉載于:https://www.cnblogs.com/yorkyang/p/7689096.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253110.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253110.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253110.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mango 的組織重構

為了提高敏捷性,企業應將自己劃分為一些負責業務戰略計劃價值中心,承擔端到端的責任,并完全獲取有關客戶需求的信息。企業需要為員工營造可交叉協作的空間,可以學習和使用自組織的改進圈、實踐社群(CoP,Com…

vue.js單頁面應用實例

一:npm的安裝由于新版的node.js已經集成了npm的環境,所以只需去官網下載node.js并安裝,安裝完成后使用cmd檢測是否成功。測試node的版本號:node -v測試npm的版本號:npm -v以上提示代表安裝成功二:vue.js環境…

大屏拼接控制器的發展歷程與現狀分析

【中國數字視聽網訊】在大屏幕拼接系統中,我們很容易將焦點聚集在拼接單元上,殊不知幕后還有一個英雄在默默的支持,這個英雄就是是拼接控制器。拼接控制器的優劣直接決定著整個大屏幕顯示系統效果的好與壞,也決定了整套顯示系統的…

AA級與AAA級臺燈 重要指標對比

讀寫作業臺燈,按照國家標準(GB/T 9473-2017 讀寫作業臺燈性能要求 )臺燈只有兩個等級 即為A級和AA級: 但是大家在各個購物網站挑選臺燈尤其是挑選孩子學習用的讀寫臺燈時,會發現很多廠家宣稱臺 燈為AAA級&#xff0c…

windbg調試相關命令

windbg查找函數:x exe!main*條件斷點打印字符:bp 7199a2b0 ".printf \"message:%ma\", poi(esp8);.echo;g"//搜索內存:s -a 0000000000780000 L8000000 "This is a test2"!address,可以查看進程的堆布局,堆屬性。!addre…

零基礎學python,看完這篇文章,你的python基礎就差不多了!干貨【1】

2019獨角獸企業重金招聘Python工程師標準>>> Python基礎語法和面向對象(下一篇分享面向對象) Python基礎語法 1. 認識Python 1.1 Python 簡介 Python 的創始人為吉多范羅蘇姆(Guido van Rossum)。 Python 的設計目標&a…

消費類電子認證測試資料清單

消費類電子上市前必須取得相關認證,其中最常見的有3C、SRRC和CTA等強制性認證,還有類似TUV和Rohs等自愿性認證,現將常見認證測試資料清單小結如下: CCC測試認證: 測試項:EMC、安規和隨機等。 SRRC核準&am…

SVG 相關整理

1. 中文參考手冊: http://www.runoob.com/svg/svg-reference.html SVG HTML5 資源教程 http://www.html5tricks.com/tag/svg/ 2.SVG 入門到精通 http://www.w3cplus.com/blog/tags/411.html 3.SVG開發包整理 http://www.oschina.net/project/tag/420/svg http://www…

液晶拼接控制器

液晶拼接墻系統是由液晶拼接顯示單元、液晶拼接支架、液晶拼接控制器器和信號源組合而成的。液晶拼接控制器則是液晶拼接系統的重要組成部分。 液晶拼接控制器一般分為兩種:內置嵌入式液晶拼接器、外置液晶拼接控制器。 內置嵌入式液晶拼接器 內置嵌入式液晶拼接器只…

03-類與對象——課后動手動腦

1.早期我們經常這樣定義變量 int value100; 前面的示例中這樣定義變量 MyClass obj new MyClass(); 這兩種方式定義的變量是一樣的嗎? 這兩種方式定義的變量是一樣的,因為它們都是類的實例化,只是第一種是一個簡便的寫法&#xf…

IPython 使用記錄

記錄使用的一些技巧處理 1 自動重載修改的文件 局部的會話中使用 如果想在當前 ipython 會話中使用,則運行 ipython 后,依次鍵入下面語句即可 %load_ext autoreload %autoreload 2 全局使用如果想為了懶省事,我希望 IPython 一直會自動重載&a…

有道智能學習燈 初體驗

有道詞典筆在業內樹立了一個標桿,自認為有道出品必須精品! 但是今天剛初步體驗了一下有道智能學習燈,硬件方面說實話有點意外,猜測這應該不是有道詞典 筆團隊打造的硬件產品吧。 現在將個人體驗感受表格化陳述如下:…

視頻處理器

http://baike.baidu.com/link?url9Ql-myLXWgFtt8ItgnYe1suvbqU57tivB8WwTVHqNqGWKNQqgvkQ7uqYrw22I44LO-LCmjQuKAk-SGGWV8di4_

centos忘記root用戶的密碼

方法: 1.在開機啟動的時候快速按鍵盤上的“E”鍵 或者“ESC”鍵(如果做不到精準快速可以在啟動前一直按著或者不停的按),會進入如下界面。如果你的有多個操作系統就會出現多個內核,就會出現多個選項 2. 選擇你忘記密碼…

MySql(18)——Linux MySQL主從配置

MySQL 主從配置 Author:xushuyi 參照技術:http://www.cnblogs.com/kevingrace/p/6256603.html 1. 主從數據庫 1、主庫:192.168.56.100 2、從庫:192.168.56.102 3、創建主從數據庫一定要保證主從數據庫字符集編碼的一致性,否則主從…

linux之PHY

一.結構體 1.PHY設備 [cpp]view plaincopy struct phy_device { struct phy_driver *drv; //PHY設備驅動 struct mii_bus *bus; //對應的MII總線 struct device dev; //設備文件 u32 phy_id; //PHY ID enum phy_state state; //PHY狀態 …

元器件 失效分析 過程介紹

硬件產品在使用過程中,常常會出現功能失效的情況。排除裝配異常的話,功能失效一般是電路可能出現故障,具體可能是某個元器件損壞了。需要研發及時分析定位故障原因及時改善排除故障,尤其是在試產階段,顯得十分重要&…

OWI

2019獨角獸企業重金招聘Python工程師標準>>> V$EVENT_NAME V$EVENT_NAME displays information about wait events. ColumnDatatypeDescriptionEVENT#NUMBERNumber of the wait eventEVENT_IDNUMBERIdentifier of the wait eventNAMEVARCHAR2(64)Name of the wait e…

201521123110《Java程序設計》第5周學習總結

1. 本周學習總結 1.1 嘗試使用思維導圖總結有關多態與接口的知識點。 2. 書面作業 1.代碼閱讀:Child壓縮包內源代碼 1.1 com.parent包中Child.java文件能否編譯通過?哪句會出現錯誤?試改正該錯誤。并分析輸出結果。不能編譯通過,因為System.out.println…

Python中正則表達式講解

正則表達式是匹配字符串的強大武器,它的核心思想是給字符串定義規則,凡是符合規則的字符串就是匹配了,否則就是不合法的。在介紹Python的用法之前,我們先講解一下正則表達式的規則,然后再介紹在Python中如何運用。 如果…