sysctl優化linux網絡

sysctl優化linux網絡  
1, 優化網絡設備接收隊列
  net.core.netdev_max_backlog=3000
   該文件表示在每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
   默認值:Red Hat Linux release 9 (Shrike)默認爲300
           rhel5 默認爲1000
   建議值爲3000
2, net.ipv4.conf.lo.accept_redirects
   accept_redirects:該參數位於 /proc/sys/net/ipv4/conf/DEV/accept_redirects (DEV表示具體的網絡接口),如果你的主機所在的網段中有兩個路由器,你將其中一個設置成了缺省網關,但是該網關在收到你的ip包時發現該ip包必須經 過另外一個路由器,這時這個路由器就會給你發一個所謂的“重定向”icmp包,告訴將ip包轉發到另外一個路由器。參數值爲布爾值,1表示接收這類重定向 icmp 信息,0表示忽略。在充當路由器的linux主機上缺省值爲0,在一般的linux主機上缺省值爲1。建議將其改爲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
3, 打開TIME-WAIT套接字重用功能,對於存在大量連接的Web服務器非常有效。
   net.ipv4.tcp_tw_recyle=1
   net.ipv4.tcp_tw_reuse=1
   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
下邊的命令用來對連接數量非常大的服務器進行調優.
·對於同時支持很多連接的服務器,新的連接可以重新使用TIME-WAIT套接字. 這對於Web服務器非常有效:
如果你使用該命令,還要啓動TIME-WAIT 套接字狀態的快速循環功能:
圖Figure 10-7顯示出將這些功能啓用,連接數量明顯降低.因爲每個TCP傳輸都包含遠程客戶端的協議信息緩存,所以有利於提高性能.緩存中存放round-trip時間、最大segment大小、擁塞窗口的信息。
4, 減少處於FIN-WAIT-2連接狀態的時間,使系統可以處理更多的連接。
   net.ipv4.tcp_fin_timeout=30
    tcp_fin_timeout:在一個tcp會話過程中,在會話結束時,A首先向B發送一個fin包,
    在獲 得B的ack確認包後,A就進入FIN WAIT2狀態等待B的fin包然後給B發ack確認包。
    這個參數就是用來設置A進入FIN WAIT2狀態等待對方fin包的超時時間。
    如果時間到了仍未收到對方的fin包就主動釋放該會話。
    參數值爲整數,單位爲秒,缺省爲180秒
   對於本端斷開的socket連接,TCP保持在FIN-WAIT-2狀態的時間。對方可能
  會斷開連接或一直不結束連接或不可預料的進程死亡。默認值爲 60 秒。過去在
  2.2版本的內核中是 180 秒。您可以設置該值,但需要注意,如果您的機器爲負
  載很重的web服務器,您可能要冒內存被大量無效數據報填滿的風險,
  FIN-WAIT-2 sockets 的危險性低於 FIN-WAIT-1,因爲它們最多隻吃 1.5K
  的內存,但是它們存在時間更長。另外參考 tcp_max_orphans。
·參數tcp_fin_timeout 是套接字關閉時,保持FIN-WAIT-2狀態的時間。一個TCP連接以three-segment SYN序列開始, 以three-segment FIN序列結束.均不保留數據.通過改變tcp_fin_timeout的值, 從FIN序列到內存可以空閒出來處理新連接的時間縮短了,使性能得到改進.改變這個值的前要經過認真的監測,避免因爲死套接字造成內存溢出.

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

  /proc/sys/net/ipv4/tcp_keepalive_time
  該文件表示從不再傳送數據到向連接上發送保持連接信號之間所需的秒數。
  缺省設置:7200(2小時)
服務器的一個問題是,同一時刻的大量TCP連接裏有很多的連接被打開但是沒有使用. TCP的keepalive功能檢測到這些連接,缺省情況下,在2小時之後丟掉. 2個小時的可能導致內存過度使用,降低性能.因此改成1800秒(30分鐘)是個更好的選擇:
6, 增加TCP SYN隊列長度,使系統可以處理更多的併發連接。
    net.ipv4.tcp_max_syn_backlog=8192

    /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請求或那些廣播地址的請求。
    當服務器負載繁重或者是有很多客戶端都是超長延時的連接故障,可能會導致half-open連接數量的增加。這對於Web服務器很來講很平常,尤其有很多撥號客戶時.這些half-open連接保存在 backlog connections 隊列中.將這個值最少設置爲4096 (缺省爲1024). 即便是服務器不接收這類連接,設置這個值還能防止受到denial-of-service (syn-flood)的***.
7, 1)     優化系統套接字緩衝區
    net.core.rmem_max=16777216
     net.core.wmem_max=16777216
    5) /proc/sys/net/core/rmem_default
    該文件指定了接收套接字緩衝區大小的缺省值(以字節爲單位)。
    缺省設置:110592
    6) /proc/sys/net/core/rmem_max
    該文件指定了接收套接字緩衝區大小的最大值(以字節爲單位)。
    缺省設置:131071
    7) /proc/sys/net/core/wmem_default
    該文件指定了發送套接字緩衝區大小的缺省值(以字節爲單位)。
    缺省設置:110592
    8) /proc/sys/net/core/wmem_max
    該文件指定了發送套接字緩衝區大小的最大值(以字節爲單位)。
    缺省設置:131071
·對於所有協議的隊列,設置最大系統發送緩存(wmem) 和接收緩存(rmem)到8MB
這些設置指定了創建TCP套接字時爲其分配的內存容量. 另外,使用如下命令發送和接收緩存.該命令設定了三個值:最小值、初始值和最大值:
第三個值必須小於或等於wmem_max和rmem_max。
8 打開TCP SYN cookie選項,有助於保護服務器免受SyncFlood***。
net.ipv4.tcp_syncookies=1
/proc/sys/net/ipv4/tcp_syncookies
該文件表示是否打開TCP同步標籤(syncookie),內核必須打開了 CONFIG_SYN_COOKIES項進行編譯。 同步標籤(syncookie)可以防止一個套接字在有過多試圖連接到達時引起過載。
tcp_syncookies 參數類型:整型
只有在內核編譯時選擇了CONFIG_SYNCOOKIES時纔會發生作用。當出現syn等候隊列出現溢出時象對方發送syncookies。目的是爲了防止syn flood***。默認值是false。
注意:該選項千萬不能用於那些沒有收到***的高負載服務器,如果在日誌中出現 synflood消息,但是調查發現沒有收到synflood***,而是合法用戶的連接負載過高的原因,你應該調整其它參數來提高服務器性能。參考: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.
syncookie嚴重的違背TCP協議,不允許使用TCP擴展,可能對某些服務導致嚴重的性能影響(如SMTP轉發)。
開啓TCP SYN cookies,保護服務器避免受syn-flood***,包括服務取決denial-of-service (DoS) 或者分佈式服務拒絕distributed denial-of-service (DDoS) (僅適用Red Hat Enterprise Linux AS)
9  關閉路由相關功能
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
/proc/sys/net/ipv4/*/secure_redirects
 其實所謂的“安全重定向”就是隻接受來自網關的“重定向”icmp包。該參數就是
 用來設置“安全重定向”功能的。參數值爲布爾值,1表示啓用,0表示禁止,缺省值
 爲啓用。
send_redirects - 布爾類型
   如果是router,發送重定向消息,默認值是TRUE

accept_redirects - 布爾類型
   收發接收ICMP重定向消息。對於主機來說默認爲True,對於用作路由器時默認值爲False。

·以下命令使服務器忽略來自被列入網關的服務器的重定向。因重定向可以被用來進行***,所以我們只接受有可靠來源的重定向。
另 外,你可以配置接受或拒絕任何ICMP重定向。ICMP重定向是路由器傳輸路由信息的機制。比如,當網關接收到來自所接網絡主機的Internet數據報 時,網關可以發送重定向信息到一臺主機。網關檢查路由表獲得下一個網關的地址,第二個網關將數據報路由到目標網絡.關閉這些重定向得命令如下:
·如果這個服務器不是一臺路由器,那麼它不會發送重定向,所以可以關閉該功能:

10    優化TCP接收/發送緩衝區
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
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則不受該值影響。


tcp_wmem - 三個整數的向量: min, default, max
    min:爲TCP socket預留用於發送緩衝的內存最小值。每個tcp socket都可以在建議以後都可以使用它。默認值爲4K。
    default:爲TCP socket預留用於發送緩衝的內存數量,默認情況下該值會影響其它協議使用的net.core.wmem_default 值,一般要低於net.core.wmem_default的值。默認值爲16K。
    max: 用於TCP socket發送緩衝的內存最大值。該值不會影響net.core.wmem_max,今天選擇參數SO_SNDBUF則不受該值影響。默認值爲128K。

tcp_rmem - 三個整數的向量: min, default, max
    min:爲TCP socket預留用於接收緩衝的內存數量,即使在內存出現緊張情況下tcp socket都至少會有這麼多數量的內存用於接收緩衝,默認值爲8K。
    default:爲TCP socket預留用於接收緩衝的內存數量,默認情況下該值影響其它協議使用的 net.core.wmem_default 值。該值決定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win:0是默認值情況下,tcp 窗口大小爲65535。
   max:用於TCP socket接收緩衝的內存最大值。該值不會影響 net.core.wmem_max,今天選擇參數 SO_SNDBUF則不受該值影響。默認值爲 128K。默認值爲87380*2 bytes。
11,
配置服務器拒絕接受廣播風暴或者smurf ***attacks:
12,
·有些路由器針對廣播禎發送無效的迴應,每個都產生警告並在內核產生日誌.這些迴應可以被忽略:
13,
 # don't cache ssthresh from previous connection   net.ipv4.tcp_no_metrics_save = 114,# Increase the maximum number of skb-heads to be cachednet.core.hot_list_length = 25615,# Increase the tcp-time-wait buckets pool sizenet.ipv4.tcp_max_tw_buckets = 36000016# Lower syn retry ratesnet.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 317,# Set TCP Re-Ordering value in kernel to ‘5′net.ipv4.tcp_reordering = 5
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章