/etc/sysctl.conf 調優 & 優化Linux內核參數

Linux如何在系統運行時修改內核參數(/proc/sys 與 /etc/sysctl.conf) 網絡

RedHat向員提供了很是好的方法,使咱們能夠在系統運行時更改內核參數,而不須要從新引導系統。這是經過/proc虛擬文件系統實現的。/proc/sys目錄下存放着大多數的內核參數,而且設計成能夠在系統運行的同時進行更改, 不太重新啓動機器後會失效,能夠經過更改/proc/sys中內核參數對應的文件 /etc/sysctl.conf 的內核參數來永久更改。下面咱們以打開內核的 ip轉發功能爲例說明在系統運行時修改內核參數的兩種方法。IP轉發是指容許系統對來源和目的地都不是本機的數據包經過網絡,RedHat默認屏蔽此功能,在 須要用本機做爲路由器、NAT等狀況下須要開啓此功能。併發

  方法一:修改/proc下內核參數文件內容dom

  直接修改內核參數ip_forward對應在/proc下的文件/proc/sys/net/ipv4/ip_forward。用下面命令查看ip_forward文件內容:
  # cat /proc/sys/net/ipv4/ip_forward
  該文件默認值0是禁止ip轉發,修改成1即開啓ip轉發功能。修改命令以下:
  # echo 1 >/proc/sys/net/ipv4/ip_forward
  修改事後就立刻生效,即內核已經打開ip轉發功能。但若是系統重啓後則又恢復爲默認值0,若是想永久打開須要經過修改/etc/sysctl.conf文件的內容來實現。socket

  方法二.修改/etc/sysctl.conf文件
  默認sysctl.conf文件中有一個變量是
  net.ipv4.ip_forward = 0
  將後面值改成1,而後保存文件。由於每次系統啓動時初始化腳本/etc/rc.d/rc.sysinit會讀取/etc/sysctl.conf文件的內容,因此修改後每次系統啓動時都會開啓ip轉發功能。但只是修改sysctl文件不會立刻生效,若是想使修改立刻生效能夠執行下面的命令:
  # sysctl –ptcp

  在修改其餘內核參數時能夠向/etc/sysctl.conf文件中添加相應變量便可,下面介紹/proc/sys下內核文件與配置文件 sysctl.conf中變量的對應關係,因爲能夠修改的內核參數都在/proc/sys目錄下,因此sysctl.conf的變量名省略了目錄的前面部分(/proc/sys)。性能

  將/proc/sys中的文件轉換成sysctl中的變量依據下面兩個簡單的規則:網站

  1.去掉前面部分/proc/sys.net

  2.將文件名中的斜槓變爲點線程

  這兩條規則能夠將/proc/sys中的任一文件名轉換成sysctl中的變量名。設計

  例如:

  /proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward

  /proc/sys/kernel/hostname =》 kernel.hostname

  可使用下面命令查詢全部可修改的變量名

  # sysctl –a

  下面例舉幾個簡單的內核參數:

  1./proc/sys/kernel/shmmax
  該文件指定內核所容許的最大共享內存段的大小。

  2./proc/sys/kernel/threads-max
  該文件指定內核所能使用的線程的最大數目。

  3./proc/sys/kernel/hostname
  該文件容許您配置網絡主機名。

  4./proc/sys/kernel/domainname
  該文件容許您配置網絡域名

一、net.ipv4.tcp_max_syn_backlog = 65536

記錄的那些還沒有收到客戶端確認信息的鏈接請求的最大值。對於超過128M內存的系統而言,缺省值是1024,低於128M小內存的系統則是128。

SYN Flood攻擊利用TCP協議散佈握手的缺陷,僞造虛假源IP地址發送大量TCP-SYN半打開鏈接到目標系統,最終致使目標系統Socket隊列資源耗盡而沒法接受新的鏈接。爲了應付這種攻擊,現代Unix系統中廣泛採用多鏈接隊列處理的方式來緩衝(而不是解決)這種攻擊,是用一個基本隊列處理正常的徹底鏈接應用(Connect()和Accept() ),是用另外一個隊列單獨存放半打開鏈接。

這種雙隊列處理方式和其餘一些系統內核措施(例如Syn-Cookies/Caches)聯合應用時,可以比較有效的緩解小規模的SYN Flood攻擊(事實證實<1000p/s)加大SYN隊列長度能夠容納更多等待鏈接的網絡鏈接數,通常遭受SYN Flood攻擊的網站,都存在大量SYN_RECV狀態,因此調大tcp_max_syn_backlog值能增長抵抗syn攻擊的能力。

二、net.core.netdev_max_backlog =  32768

每一個網絡接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的數據包的最大數目。

三、net.core.somaxconn = 32768

調整系統同時發起併發TCP鏈接數,可能須要提升鏈接儲備值,以應對大量突發入局鏈接請求的狀況。若是同時接收到大量鏈接請求,使用較大的值會提升受支持的暫掛鏈接的數量,從而可減小鏈接失敗的數量。大的偵聽隊列對防止DDoS攻擊也會有所幫助。掛起請求的最大數量默認是128。

四、net.core.wmem_default = 8388608

該參數指定了發送套接字緩衝區大小的缺省值(以字節爲單位)

五、net.core.rmem_default = 8388608

該參數指定了接收套接字緩衝區大小的缺省值(以字節爲單位)

六、net.core.rmem_max = 16777216

該參數指定了接收套接字緩衝區大小的最大值(以字節爲單位)

七、net.core.wmem_max = 16777216

該參數指定了發送套接字緩衝區大小的最大值(以字節爲單位)

八、net.ipv4.tcp_timestamps = 0

Timestamps能夠防範那些僞造的sequence號碼。一條1G的寬帶線路或許會重遇到帶out-of-line數值的舊sequence號碼(假如它是因爲上次產生的)。時間戳可以讓內核接受這種「異常」的數據包。這裏須要將其關掉,以提升性能。

九、net.ipv4.tcp_synack_retries = 2

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

十、net.ipv4.tcp_syn_retries = 2

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

十一、net.ipv4.tcp_tw_recycle = 1

表示開啓TCP鏈接中TIME-WAIT Sockets的快速回收,默認爲0,表示關閉。

#net.ipv4.tcp_tw_len = 1

十二、net.ipv4.tcp_tw_reuse = 1

表示開啓重用,容許將TIME-WAIT Sockets從新用於新的TCP鏈接,默認爲0,表示關閉。這個對快速重啓動某些服務,而啓動後提示端口已經被使用的情形很是有幫助。

1三、net.ipv4.tcp_mem = 94500000 915000000 927000000

tcp_mem有3個INTEGER變量:low, pressure, high

low:當TCP使用了低於該值的內存頁面數時,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倍的數據。

通常狀況下這些值是在系統啓動時根據系統內存數量計算獲得的。

1四、net.ipv4.tcp_max_orphans = 3276800

系統所能處理不屬於任何進程的TCP sockets最大數量。假如超過這個數量﹐那麼不屬於任何進程的鏈接會被當即reset,並同時顯示警告信息。之因此要設定這個限制﹐純粹爲了抵禦那些簡單的DoS攻擊﹐千萬不要依賴這個或是人爲的下降這個限制

#net.ipv4.tcp_fin_timeout = 30

#net.ipv4.tcp_keepalive_time = 120

1五、net.ipv4.ip_local_port_range = 1024  65535

將系統對本地端口範圍限制設置爲1024~65000之間

1六、net.ipv4.ip_conntrack_max = 10000

設置系統對最大跟蹤的TCP鏈接數的限制(CentOS 5.6無此參數)

相關文章
相關標籤/搜索