1. 程式人生 > >Linux 核心網路優化

Linux 核心網路優化

5) /proc/sys/net/ipv4/inet_peer_gc_maxtime
廢物收集(GC)通過的最大間隔,這個間隔會影響到緩衝池中記憶體的低壓力。 該值
以 jiffies為單位測量。

預設設定:120
6.3 TCP Variables
1) /proc/sys/net/ipv4/tcp_syn_retries
該檔案表示本機向外發起TCP SYN連線超時重傳的次數,不應該高於255;該值僅僅針對外出的連線,對於進來的連線由tcp_retries1控制。

預設設定:5
2) /proc/sys/net/ipv4/tcp_keepalive_probes
該檔案表示丟棄TCP連線前,進行最大TCP保持連線偵測的次數。保持連線僅在
SO_KEEPALIVE套接字選項被開啟時才被髮送。

預設設定:9(次)
3) /proc/sys/net/ipv4/tcp_keepalive_time
該檔案表示從不再傳送資料到向連線上傳送保持連線訊號之間所需的秒數。

預設設定:7200(2小時)
4) /proc/sys/net/ipv4/tcp_keepalive_intvl
該檔案表示傳送TCP探測的頻率,乘以tcp_keepalive_probes表示斷開沒有相應的TCP連線的時間。

預設設定:75(秒)
5) /proc/sys/net/ipv4/tcp_retries1
  該檔案表示放棄迴應一個TCP連線請求前進行重傳的次數。
  
  預設設定:3
6) /proc/sys/net/ipv4/tcp_retries2
  該檔案表示放棄在已經建立通訊狀態下的一個TCP資料包前進行重傳的次數。
  
  預設設定:15
7) /proc/sys/net/ipv4/tcp_orphan_retries
在近端丟棄TCP連線之前,要進行多少次重試。預設值是 7 個,相當於 50秒–
16分鐘,視 RTO 而定。如果您的系統是負載很大的web伺服器,那麼也許需
要降低該值,這類 sockets 可能會耗費大量的資源。另外參考
tcp_max_orphans。
8) /proc/sys/net/ipv4/tcp_fin_timeout
對於本端斷開的socket連線,TCP保持在FIN-WAIT-2狀態的時間。對方可能
會斷開連線或一直不結束連線或不可預料的程序死亡。預設值為 60 秒。過去在
2.2版本的核心中是 180 秒。您可以設定該值,但需要注意,如果您的機器為負
載很重的web伺服器,您可能要冒記憶體被大量無效資料報填滿的風險,
FIN-WAIT-2 sockets 的危險性低於 FIN-WAIT-1,因為它們最多隻吃 1.5K
的記憶體,但是它們存在時間更長。另外參考 tcp_max_orphans。

預設設定:60(秒)
9) /proc/sys/net/ipv4/tcp_max_tw_buckets
系統在同時所處理的最大timewait sockets 數目。如果超過此數的話,
time-wait socket 會被立即砍除並且顯示警告資訊。之所以要設定這個限制,純
粹為了抵禦那些簡單的 DoS 攻擊,千萬不要人為的降低這個限制,不過,如果
網路條件需要比預設值更多,則可以提高它(或許還要增加記憶體)。

預設設定:180000
10) /proc/sys/net/ipv4/tcp_tw_recyle
開啟快速 TIME-WAIT sockets 回收。除非得到技術專家的建議或要求,請不要隨
意修改這個值。

預設設定:0
11) /proc/sys/net/ipv4/tcp_tw_reuse
該檔案表示是否允許重新應用處於TIME-WAIT狀態的socket用於新的TCP連線。

預設設定:0
12) /proc/sys/net/ipv4/tcp_max_orphans
系統所能處理不屬於任何程序的TCP sockets最大數量。假如超過這個數量,那
麼不屬於任何程序的連線會被立即reset,並同時顯示警告資訊。之所以要設定這
個限制,純粹為了抵禦那些簡單的 DoS 攻擊,千萬不要依賴這個或是人為的降
低這個限制。

預設設定:8192
13) /proc/sys/net/ipv4/tcp_abort_on_overflow
當守護程序太忙而不能接受新的連線,就向對方傳送reset訊息,預設值是false。
這意味著當溢位的原因是因為一個偶然的猝發,那麼連線將恢復狀態。只有在你確
信守護程序真的不能完成連線請求時才打開該選項,該選項會影響客戶的使用。

預設設定:0
14) /proc/sys/net/ipv4/tcp_syncookies
該檔案表示是否開啟TCP同步標籤(syncookie),核心必須打開了 CONFIG_SYN_COOKIES項進行編譯。 同步標籤(syncookie)可以防止一個套接字在有過多試圖連線到達時引起過載。

預設設定:0
15) /proc/sys/net/ipv4/tcp_stdurg
使用 TCP urg pointer 欄位中的主機請求解釋功能。大部份的主機都使用老舊的
BSD解釋,因此如果您在 Linux 開啟它,或會導致不能和它們正確溝通。

預設設定:0
16) /proc/sys/net/ipv4/tcp_max_syn_backlog
對於那些依然還未獲得客戶端確認的連線請求,需要儲存在佇列中最大數目。對於
超過 128Mb 記憶體的系統,預設值是 1024,低於 128Mb 的則為 128。如果
伺服器經常出現過載,可以嘗試增加這個數字。警告!假如您將此值設為大於
1024,最好修改 include/net/tcp.h 裡面的 TCP_SYNQ_HSIZE,以保持
TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如
果tcp_adv_win_scale 128Mb 32768-610000)則系統將忽略所有傳送給自己
的ICMP ECHO請求或那些廣播地址的請求。

預設設定:1024
17) /proc/sys/net/ipv4/tcp_window_scaling
該檔案表示設定tcp/ip會話的滑動視窗大小是否可變。引數值為布林值,為1時表示可變,為0時表示不可變。tcp/ip通常使用的視窗最大可達到65535 位元組,對於高速網路,該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動視窗大小增大數個數量級,從而提高資料傳輸的能力。

預設設定:1
18) /proc/sys/net/ipv4/tcp_sack
該檔案表示是否啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高效能(這樣可以讓傳送者只發送丟失的報文段);(對於廣域網通訊來說)這個選項應該啟用,但是這會增加對 CPU 的佔用。

預設設定:1
19) /proc/sys/net/ipv4/tcp_timestamps
該檔案表示是否啟用以一種比超時重發更精確的方法(請參閱 RFC 1323)來啟用對 RTT 的計算;為了實現更好的效能應該啟用這個選項。

預設設定:1
20) /proc/sys/net/ipv4/tcp_fack
該檔案表示是否開啟FACK擁塞避免和快速重傳功能。

預設設定:1
21) /proc/sys/net/ipv4/tcp_dsack
該檔案表示是否允許TCP傳送“兩個完全相同”的SACK。

預設設定:1
22) /proc/sys/net/ipv4/tcp_ecn
該檔案表示是否開啟TCP的直接擁塞通告功能。

預設設定:0
23) /proc/sys/net/ipv4/tcp_reordering
該檔案表示TCP流中重排序的資料報最大數量。

預設設定:3
24) /proc/sys/net/ipv4/tcp_retrans_collapse
該檔案表示對於某些有bug的印表機是否提供針對其bug的相容性。

預設設定:1
25) /proc/sys/net/ipv4/tcp_wmem
該檔案包含3個整數值,分別是:min,default,max
Min:為TCP socket預留用於傳送緩衝的記憶體最小值。每個TCP socket都可以使用它。
Default:為TCP socket預留用於傳送緩衝的記憶體數量,預設情況下該值會影響其它協議使用的net.core.wmem中default的 值,一般要低於net.core.wmem中default的值。
Max:為TCP socket預留用於傳送緩衝的記憶體最大值。該值不會影響net.core.wmem_max,今天選擇引數SO_SNDBUF則不受該值影響。預設值為128K。

預設設定:4096 16384 131072
26) /proc/sys/net/ipv4/tcp_rmem
該檔案包含3個整數值,分別是:min,default,max
Min:為TCP socket預留用於接收緩衝的記憶體數量,即使在記憶體出現緊張情況下TCP socket都至少會有這麼多數量的記憶體用於接收緩衝。
Default:為TCP socket預留用於接收緩衝的記憶體數量,預設情況下該值影響其它協議使用的 net.core.wmem中default的 值。該值決定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的預設值情況下,TCP 視窗大小為65535。
Max:為TCP socket預留用於接收緩衝的記憶體最大值。該值不會影響 net.core.wmem中max的值,今天選擇引數 SO_SNDBUF則不受該值影響。

預設設定:4096 87380 174760
27) /proc/sys/net/ipv4/tcp_mem
該檔案包含3個整數值,分別是:low,pressure,high
Low:當TCP使用了低於該值的記憶體頁面數時,TCP不會考慮釋放記憶體。
Pressure:當TCP使用了超過該值的記憶體頁面數量時,TCP試圖穩定其記憶體使用,進入pressure模式,當記憶體消耗低於low值時則退出pressure狀態。
High:允許所有tcp sockets用於排隊緩衝資料報的頁面量。
一般情況下這些值是在系統啟動時根據系統記憶體數量計算得到的。

預設設定:24576 32768 49152
28) /proc/sys/net/ipv4/tcp_app_win
該檔案表示保留max(window/2^tcp_app_win, mss)數量的視窗由於應用緩衝。當為0時表示不需要緩衝。

預設設定:31
29) /proc/sys/net/ipv4/tcp_adv_win_scale
該檔案表示計算緩衝開銷bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale >; 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0)。

預設設定:2
6.4 IP Variables
1) /proc/sys/net/ipv4/ip_local_port_range
該檔案表示TCP/UDP協議開啟的本地埠號。

預設設定:1024 4999
建議設定:32768 61000
2) /proc/sys/net/ipv4/ip_nonlocal_bind
該檔案表示是否允許程序邦定到非本地地址。

預設設定:0
3) /proc/sys/net/ipv4/ip_dynaddr
該引數通常用於使用撥號連線的情況,可以使系統動能夠立即改變ip包的源地址為該ip地址,同時中斷原有的tcp對話而用新地址重新發出一個syn請求包,開始新的tcp對話。在使用ip欺騙時,該引數可以立即改變偽裝地址為新的ip地址。該檔案表示是否允許動態地址,如果該值非0,表示允許;如果該值大於1,核心將通過log記錄動態地址重寫資訊。

預設設定:0
4) /proc/sys/net/ipv4/icmp_echo_ignore_all/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
該檔案表示核心是否忽略所有的ICMP ECHO請求,或忽略廣播和多播請求。
0, 響應請求
1, 忽略請求

預設設定:0
建議設定:1
5) /proc/sys/net/ipv4/icmp_ratelimit
6) /proc/sys/net/ipv4/icmp_ratemask
7) /proc/sys/net/ipv4/icmp_ignore_bogus_error_reponses
某些路由器違背RFC1122標準,其對廣播幀傳送偽造的響應來應答。這種違背行
為通常會被以告警的方式記錄在系統日誌中。如果該選項設定為True,核心不會
記錄這種警告資訊。

預設設定:0
8) /proc/sys/net/ipv4/igmp_max_memberships
該檔案表示多播組中的最大成員數量。

預設設定:20
6.5 Other Configuration
1) /proc/sys/net/ipv4/conf/*/accept_redirects
   如果主機所在的網段中有兩個路由器,你將其中一個設定成了預設閘道器,但是該閘道器
   在收到你的ip包時發現該ip包必須經過另外一個路由器,這時這個路由器就會給你
   發一個所謂的“重定向”icmp包,告訴將ip包轉發到另外一個路由器。引數值為布林
   值,1表示接收這類重定向icmp 資訊,0表示忽略。在充當路由器的linux主機上缺
   省值為0,在一般的linux主機上預設值為1。建議將其改為0以消除安全性隱患。
2) /proc/sys/net/ipv4/*/accept_source_route
 是否接受含有源路由資訊的ip包。引數值為布林值,1表示接受,0表示不接受。在
 充當閘道器的linux主機上預設值為1,在一般的linux主機上預設值為0。從安全性角
 度出發,建議關閉該功能。
3) /proc/sys/net/ipv4/*/secure_redirects
 其實所謂的“安全重定向”就是隻接受來自閘道器的“重定向”icmp包。該引數就是
 用來設定“安全重定向”功能的。引數值為布林值,1表示啟用,0表示禁止,預設值
 為啟用。
4) /proc/sys/net/ipv4/*/proxy_arp
 設定是否對網路上的arp包進行中繼。引數值為布林值,1表示中繼,0表示忽略,
 預設值為0。該引數通常只對充當路由器的linux主機有用。
七、效能優化策略
7.1 基本優化
1) 關閉後臺守護程序
系統安裝完後,系統會預設啟動一些後臺守護程序,有些程序並不是必需的;因此,關閉這些程序可以節省一部分實體記憶體消耗。以root身份登入系統,執行ntsysv,選中如下程序:
  iptables
network
syslog
random
apmd
xinetd
vsftpd
crond
local
修改完後,重新啟動系統。
如此,系統將僅僅啟動選中的這些守護程序。
2) 減少終端連線數
系統預設啟動6個終端,而實際上只需啟動3個即可;以root身份登入系統,執行vi /etc/inittab,修改成如下:
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6
如上所述,註釋掉4、5、6終端。
3) 待續。。。
7.2 網路優化
1) 優化系統套接字緩衝區
net.core.rmem_max=16777216
net.core.wmem_max=16777216
2) 優化TCP接收/傳送緩衝區
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
3) 優化網路裝置接收佇列
net.core.netdev_max_backlog=3000
4) 關閉路由相關功能
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0

net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0

net.ipv4.conf.lo.secure_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.eth0.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0

net.ipv4.conf.lo.send_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.eth0.send_redirects=0
net.ipv4.conf.default.send_redirects=0
5) 優化TCP協議棧
開啟TCP SYN cookie選項,有助於保護伺服器免受SyncFlood攻擊。
net.ipv4.tcp_syncookies=1

開啟TIME-WAIT套接字重用功能,對於存在大量連線的Web伺服器非常有效。
net.ipv4.tcp_tw_recyle=1
net.ipv4.tcp_tw_reuse=1

減少處於FIN-WAIT-2連線狀態的時間,使系統可以處理更多的連線。
net.ipv4.tcp_fin_timeout=30

減少TCP KeepAlive連線偵測的時間,使系統可以處理更多的連線。
net.ipv4.tcp_keepalive_time=1800

增加TCP SYN佇列長度,使系統可以處理更多的併發連線。
net.ipv4.tcp_max_syn_backlog=8192