Linux內核參數基礎優化

来源:https://www.cnblogs.com/su-root/archive/2018/10/31/9880398.html
-Advertisement-
Play Games

web 服務負載均衡器常規網站伺服器優化的基本配置: net.ipv4.tcp_fin_timeout =2 net.ipv4.tcp_tw_reuse =1 net.ipv4.tcp_tw_recycle =1 net.ipv4.tcp_syncookies =1 net.ipv4.tcp_kee ...


web 服務負載均衡器常規網站伺服器優化的基本配置:

net.ipv4.tcp_fin_timeout =2

net.ipv4.tcp_tw_reuse =1

net.ipv4.tcp_tw_recycle =1

net.ipv4.tcp_syncookies =1

net.ipv4.tcp_keepalive_time =600

net.ipv4.ip_local_port_range =4000 65000

net.ipv4.tcp_max_syn_backlog =16384

net.ipv4.tcp_max_tw_buckets =36000

net.ipv4.route.gc_timeout =100

net.ipv4.tcp_syn_retries =1

net.ipv4.tcp_synack_retries =1

net.core.netdev_max_backlog =16384

net.ipv4.tcp_max_orphans =16384

#以下參數是對iptables防火牆的優化,防火牆不開會提示,可以忽略不理。

net.nf_conntrack_max =25000000

net.netfilter.nf_conntrack_max= 25000000

net.netfilter.nf_conntrack_tcp_timeout_established =180

net.netfilter.nf_conntrack_tcp_timeout_time_wait =120

net.netfilter.nf_conntrack_tcp_timeout_close_wait =60

net.netfilter.nf_conntrack_tcp_timeout_fin_wait =120

將上面的內核參數值加入到/etc/sysctl.conf文件中,

vim /etc/sysctl.conf

shift+j

o

shift+insert  //將上面的參數粘貼進來

然後執行如下命令生效:

sysctl –p

-------------------------------------------------------------------------------------------------------------------------------------------------------

linux內核參數註釋:

以下表格中紅色字體為常用優化參數

文件所處目錄/proc/sys/net/core/

名稱

預設值

建議值

描述

tcp_syn_retries

5

1

對於一個新建連接,內核要發送多少個 SYN 連接請求才決定放棄。不應該大於255,預設值是5,對應於180秒左右時間。。(對於大負載而物理通信良好的網路而言,這個值偏高,可修改為2.這個值僅僅是針對對外的連接,對進來的連接,是由tcp_retries1決定的)

tcp_synack_retries

5

1

對於遠端的連接請求SYN,內核會發送SYN + ACK數據報,以確認收到上一個 SYN連接請求包。這是所謂的三次握手( threeway handshake)機制的第二個步驟。這裡決定內核在放棄連接之前所送出的 SYN+ACK 數目。不應該大於255,預設值是5,對應於180秒左右時間。

tcp_keepalive_time

7200

600

TCP發送keepalive探測消息的間隔時間(秒),用於確認TCP連接是否有效。

防止兩邊建立連接但不發送數據的攻擊。

tcp_keepalive_probes

9

3

TCP發送keepalive探測消息的間隔時間(秒),用於確認TCP連接是否有效。

tcp_keepalive_intvl

75

15

探測消息未獲得響應時,重發該消息的間隔時間(秒)。預設值為75秒。 (對於普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類伺服器需要改小該值,15是個比較合適的值)

tcp_retries1

3

3

放棄回應一個TCP連接請求前﹐需要進行多少次重試。RFC 規定最低的數值是3

tcp_retries2

15

5

在丟棄激活(已建立通訊狀況)的TCP連接之前﹐需要進行多少次重試。預設值為15,根據RTO的值來決定,相當於13-30分鐘(RFC1122規定,必須大於100秒).(這個值根據目前的網路設置,可以適當地改小,我的網路內修改為了5)

tcp_orphan_retries

7

3

在近端丟棄TCP連接之前﹐要進行多少次重試。預設值是7個﹐相當於 50秒 - 16分鐘﹐視RTO 而定。如果您的系統是負載很大的web伺服器﹐那麼也許需要降低該值﹐這類 sockets 可能會耗費大量的資源。另外參的考tcp_max_orphans。(事實上做NAT的時候,降低該值也是好處顯著的,我本人的網路環境中降低該值為3)

tcp_fin_timeout

60

2

對於本端斷開的socket連接,TCP保持在FIN-WAIT-2狀態的時間。對方可能會斷開連接或一直不結束連接或不可預料的進程死亡。預設值為 60 秒。

tcp_max_tw_buckets

180000

36000

系統在同時所處理的最大 timewait sockets 數目。如果超過此數的話﹐time-wait socket 會被立即砍除並且顯示警告信息。之所以要設定這個限制﹐純粹為了抵禦那些簡單的 DoS 攻擊﹐不過﹐如果網路條件需要比預設值更多﹐則可以提高它(或許還要增加記憶體)。(事實上做NAT的時候最好可以適當地增加該值)

tcp_tw_recycle

0

1

打開快速 TIME-WAIT sockets 回收。除非得到技術專家的建議或要求﹐請不要隨意修改這個值。(做NAT的時候,建議打開它)

tcp_tw_reuse

0

1

表示是否允許重新應用處於TIME-WAIT狀態的socket用於新的TCP連接(這個對快速重啟動某些服務,而啟動後提示埠已經被使用的情形非常有幫助)

tcp_max_orphans

8192

32768

系統所能處理不屬於任何進程的TCP sockets最大數量。假如超過這個數量﹐那麼不屬於任何進程的連接會被立即reset,並同時顯示警告信息。之所以要設定這個限制﹐純粹為了抵禦那些簡單的 DoS 攻擊﹐千萬不要依賴這個或是人為的降低這個限制。如果記憶體大更應該增加這個值。(這個值Redhat AS版本中設置為32768,但是很多防火牆修改的時候,建議該值修改為2000)

tcp_abort_on_overflow

0

0

當守護進程太忙而不能接受新的連接,就象對方發送reset消息,預設值是false。這意味著當溢出的原因是因為一個偶然的猝發,那麼連接將恢復狀態。只有在你確信守護進程真的不能完成連接請求時才打開該選項,該選項會影響客戶的使用。(對待已經滿載的sendmail,apache這類服務的時候,這個可以很快讓客戶端終止連接,可以給予服務程式處理已有連接的緩衝機會,所以很多防火牆上推薦打開它)

tcp_syncookies

0

1

只有在內核編譯時選擇了CONFIG_SYNCOOKIES時才會發生作用。當出現syn等候隊列出現溢出時象對方發送syncookies。目的是為了防止syn flood攻擊。

tcp_stdurg

0

0

使用 TCP urg pointer 欄位中的主機請求解釋功能。大部份的主機都使用老舊的 BSD解釋,因此如果您在 Linux 打開它﹐或會導致不能和它們正確溝通。

tcp_max_syn_backlog

1024

16384

對於那些依然還未獲得客戶端確認的連接請求﹐需要保存在隊列中最大數目。對於超過 128Mb 記憶體的系統﹐預設值是 1024 ﹐低於 128Mb 的則為 128。如果伺服器經常出現過載﹐可以嘗試增加這個數字。警告﹗假如您將此值設為大於 1024﹐最好修改include/net/tcp.h裡面的TCP_SYNQ_HSIZE﹐以保持TCP_SYNQ_HSIZE*16(SYN Flood攻擊利用TCP協議散佈握手的缺陷,偽造虛假源IP地址發送大量TCP-SYN半打開連接到目標系統,最終導致目標系統Socket隊列資源耗盡而無法接受新的連接。為了應付這種攻擊,現代Unix系統中普遍採用多連接隊列處理的方式來緩衝(而不是解決)這種攻擊,是用一個基本隊列處理正常的完全連接應用(Connect()和Accept() ),是用另一個隊列單獨存放半打開連接。這種雙隊列處理方式和其他一些系統內核措施(例如Syn-Cookies/Caches)聯合應用時,能夠比較有效的緩解小規模的SYN Flood攻擊(事實證明)

tcp_window_scaling

1

1

該文件表示設置tcp/ip會話的滑動視窗大小是否可變。參數值為布爾值,為1時表示可變,為0時表示不可變。tcp/ip通常使用的視窗最大可達到 65535 位元組,對於高速網路,該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動視窗大小增大數個數量級,從而提高數據傳輸的能力(RFC 1323)。(對普通地百M網路而言,關閉會降低開銷,所以如果不是高速網路,可以考慮設置為0)

tcp_timestamps

1

1

Timestamps 用在其它一些東西中﹐可以防範那些偽造的 sequence 號碼。一條1G的寬頻線路或許會重遇到帶 out-of-line數值的舊sequence 號碼(假如它是由於上次產生的)。Timestamp 會讓它知道這是個 '舊封包'。(該文件表示是否啟用以一種比超時重發更精確的方法(RFC 1323)來啟用對 RTT 的計算;為了實現更好的性能應該啟用這個選項。)

tcp_sack

1

1

使用 Selective ACK﹐它可以用來查找特定的遺失的數據報--- 因此有助於快速恢復狀態。該文件表示是否啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高性能(這樣可以讓發送者只發送丟失的報文段)。(對於廣域網通信來說這個選項應該啟用,但是這會增加對 CPU 的占用。)

tcp_fack

1

1

打開FACK擁塞避免和快速重傳功能。(註意,當tcp_sack設置為0的時候,這個值即使設置為1也無效)[這個是TCP連接靠譜的核心功能]

tcp_dsack

1

1

允許TCP發送"兩個完全相同"的SACK。

tcp_ecn

0

0

TCP的直接擁塞通告功能。

tcp_reordering

3

6

TCP流中重排序的數據報最大數量。 (一般有看到推薦把這個數值略微調整大一些,比如5)

tcp_retrans_collapse

1

0

對於某些有bug的印表機提供針對其bug的相容性。(一般不需要這個支持,可以關閉它)

tcp_wmemmindefaultmax

4096

16384

131072

8192

131072

16777216

發送緩存設置

min:為TCP socket預留用於發送緩衝的記憶體最小值。每個tcp socket都可以在建議以後都可以使用它。預設值為4096(4K)。

default:為TCP socket預留用於發送緩衝的記憶體數量,預設情況下該值會影響其它協議使用的net.core.wmem_default 值,一般要低於net.core.wmem_default的值。預設值為16384(16K)。

max: 用於TCP socket發送緩衝的記憶體最大值。該值不會影響net.core.wmem_max,"靜態"選擇參數SO_SNDBUF則不受該值影響。預設值為131072(128K)。(對於伺服器而言,增加這個參數的值對於發送數據很有幫助,在我的網路環境中,修改為了51200 131072 204800)

tcp_rmemmindefaultmax

4096

87380

174760

32768

131072

16777216

接收緩存設置

同tcp_wmem

tcp_memmindefaultmax

根據記憶體計算

786432

1048576 1572864

low:當TCP使用了低於該值的記憶體頁面數時,TCP不會考慮釋放記憶體。即低於此值沒有記憶體壓力。(理想情況下,這個值應與指定給 tcp_wmem 的第 2 個值相匹配 - 這第 2 個值表明,最大頁面大小乘以最大併發請求數除以頁大小 (131072 * 300 / 4096)。 )

pressure:當TCP使用了超過該值的記憶體頁面數量時,TCP試圖穩定其記憶體使用,進入pressure模式,當記憶體消耗低於low值時則退出pressure狀態。(理想情況下這個值應該是 TCP 可以使用的總緩衝區大小的最大值 (204800 * 300 / 4096)。 )

high:允許所有tcp sockets用於排隊緩衝數據報的頁面量。(如果超過這個值,TCP 連接將被拒絕,這就是為什麼不要令其過於保守 (512000 * 300 / 4096) 的原因了。 在這種情況下,提供的價值很大,它能處理很多連接,是所預期的 2.5 倍;或者使現有連接能夠傳輸 2.5 倍的數據。 我的網路里為192000 300000 732000)

一般情況下這些值是在系統啟動時根據系統記憶體數量計算得到的。

tcp_app_win

31

31

保留max(window/2^tcp_app_win, mss)數量的視窗由於應用緩衝。當為0時表示不需要緩衝。

tcp_adv_win_scale

2

2

計算緩衝開銷bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale BOOLEAN>0)

tcp_low_latency

0

0

允許 TCP/IP 棧適應在高吞吐量情況下低延時的情況;這個選項一般情形是的禁用。(但在構建Beowulf 集群的時候,打開它很有幫助)

tcp_westwood

0

0

啟用發送者端的擁塞控制演算法,它可以維護對吞吐量的評估,並試圖對帶寬的整體利用情況進行優化;對於 WAN 通信來說應該啟用這個選項。

tcp_bic

0

0

為快速長距離網路啟用 Binary Increase Congestion;這樣可以更好地利用以 GB 速度進行操作的鏈接;對於 WAN 通信應該啟用這個選項。

ip_forward

0

NAT必須開啟IP轉發支持,把該值寫1

ip_local_port_range:minmax

32768

61000

1024

65000

表示用於向外連接的埠範圍,預設比較小,這個範圍同樣會間接用於NAT表規模。

ip_conntrack_max

65535

65535

系統支持的最大ipv4連接數,預設65536(事實上這也是理論最大值),同時這個值和你的記憶體大小有關,如果記憶體128M,這個值最大8192,1G以上記憶體這個值都是預設65536

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

所處目錄/proc/sys/net/ipv4/netfilter/

文件需要打開防火牆才會存在

名稱

預設值

建議值

描述

ip_conntrack_max

65536

65536

系統支持的最大ipv4連接數,預設65536(事實上這也是理論最大值),同時這個值和你的記憶體大小有關,如果記憶體128M,這個值最大8192,1G以上記憶體這個值都是預設65536,這個值受/proc/sys/net/ipv4/ip_conntrack_max限制

ip_conntrack_tcp_timeout_established

432000

180

已建立的tcp連接的超時時間,預設432000,也就是5天。影響:這個值過大將導致一些可能已經不用的連接常駐於記憶體中,占用大量鏈接資源,從而可能導致NAT ip_conntrack: table full的問題。建議:對於NAT負載相對本機的 NAT表大小很緊張的時候,可能需要考慮縮小這個值,以儘早清除連接,保證有可用的連接資源;如果不緊張,不必修改

ip_conntrack_tcp_timeout_time_wait

120

120

time_wait狀態超時時間,超過該時間就清除該連接

ip_conntrack_tcp_timeout_close_wait

60

60

close_wait狀態超時時間,超過該時間就清除該連接

ip_conntrack_tcp_timeout_fin_wait

120

120

fin_wait狀態超時時間,超過該時間就清除該連接

 

 

 

 

 

 

 

 

 

 

 

 

 

文件所處目錄/proc/sys/net/core/

名稱

預設值

建議值

描述

netdev_max_backlog


1024

16384

每個網路介面接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目,對重負載伺服器而言,該值需要調高一點。

somaxconn 


128

16384

用來限制監聽(LISTEN)隊列最大數據包的數量,超過這個數量就會導致鏈接超時或者觸發重傳機制。

web應用中listen函數的backlog預設會給我們內核參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG預設為511,所以有必要調整這個值。對繁忙的伺服器,增加該值有助於網路性能

wmem_default

129024

129024

預設的發送視窗大小(以位元組為單位)

rmem_default

129024

129024

預設的接收視窗大小(以位元組為單位)

rmem_max

129024

873200

最大的TCP數據接收緩衝

wmem_max

129024

873200

最大的TCP數據發送緩衝

 

 

 

 

 

 

 

 

 

 

 

 

 

 

這兒所列參數是老男孩老師生產中常用的參數:

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_keepalive_intvl =15

net.ipv4.tcp_retries2 = 5

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_max_orphans = 32768

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_wmem = 8192 131072 16777216

net.ipv4.tcp_rmem = 32768 131072 16777216

net.ipv4.tcp_mem = 786432 1048576 1572864

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.ip_conntrack_max = 65536

net.ipv4.netfilter.ip_conntrack_max=65536

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180

net.core.somaxconn = 16384

net.core.netdev_max_backlog = 16384

具體優化值要參考應用場景,這兒所列只是常用優化參數,是否適合,可在上面查看該參數描述,再根據自己生產環境而設。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 好久沒有更新文章了,前段時間寫了一系列的文章放到桌面了,想著修修改改,後來系統中勒索病毒了還被公司網路安全的抓到是我電腦,後來裝系統文章給裝丟了。然後好長一段時間沒有寫了。 今天記錄一下AspNetCore 部署Docker+Centos 7 這裡說明一下:Docker 需要用Centos7版本的操 ...
  • 考慮到很多面試可能會考察冒泡排序的用法,所以特地花時間釐清了一下思路。下麵說一下我的思路:冒泡排序核心就是比較方法,冒泡排序的比較方法顧名思義就是像氣泡一樣,最大(或者最小)的數往上冒。普通比較幾個數,我們可以用if(a>b)然後c=a;b=a 。。。。這類方法,把大數暫存到c中,然後小的數存到原本 ...
  • 開機啟動程式,在很多場合都會用到,尤其是那種在後臺運行的程式。 效果圖: 以上兩幅圖都用到了命令行啟動程式,為了模擬開機啟動或者其他程式調用此程式。 第一幅圖:程式啟動可以根據不同參數,執行不同的操作。如果是雙擊啟動,就自動運行邏輯代碼,如果是帶特定參數啟動,就自動運行邏輯代碼。 第二幅圖:winf ...
  • 好久沒寫博客了,就寫一個小東西 var sBufferDist = document.getElementById('txtBufferDist').value; var sBufferBlank = sBufferDist.replace(/\ +/g, "");//將空格變成空,其中CS中的Tr ...
  • (轉自網易AlexChen) 1.配置文件鏈接。 利用VS.NET開發平臺進行開發的時候將會經常遇到要和資料庫打交道,存取數據。這就涉及到和資料庫的連接問題,.NET開發平臺為我們提供了一種簡單的方式來定義和資料庫連接的字元串。這就是在Web.Config文件中添加連接字元串。由於在開發中多次遇到這 ...
  • 瞭解MVC開發模式,首先我們要瞭解一下發展趨勢 一、什麼是軟體設計 Jack W.Reeves 於14年前(1992年),就在其撰寫的論文——《What is Software Design》中給出了其個人觀點——“代碼源就是設計”。 類比:建築設計行業中,建築設計圖的最終完成標識了設計過程的終結, ...
  • 前言 前面學習了autofac這個依賴註入組件,本來是打算寫在一起的,因為這個組件沒打算像autofac一樣詳細的寫,只是寫下以前自己鼓搗玩搭建框架然後使用的一個依賴註入組件,並且也是進行了封裝使用。不打算作為學習知識,僅作為使用封裝記錄的。 沒想autofac寫著寫著篇幅有點長,就單獨當作一個封裝 ...
  • 目錄 1、linux內核參數註釋 2、兩種修改內核參數方法 3、內核優化參數生產配置 參數解釋由網路上收集整理,常用優化參數對比了網上多個實際應用進行表格化整理,使查看更直觀。 學習linux也有不少時間了,每次優化linux內核參數時,都是在網上拷貝而使用,甚至別人沒有列出來的參數就不管了,難道我 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...