linux系統引數調優全解析

pythontab發表於2013-03-29

所有的TCP/IP調優引數都位於/proc/sys/net/目錄。例如,下面是最重要的一些調優引數,後面是它們的含義:

  1、/proc/sys/net/core/rmem_max - 最大的TCP資料接收緩衝

  2、/proc/sys/net/core/wmem_max - 最大的TCP資料傳送緩衝

  3、/proc/sys/net/ipv4/tcp_timestamps - 時間戳在(請參考RFC 1323)TCP的包頭增加12個位元組

  4、/proc/sys/net/ipv4/tcp_sack - 有選擇的應答

  5、/proc/sys/net/ipv4/tcp_window_scaling - 支援更大的TCP視窗。 如果TCP視窗最大超過65535(64K), 必須設定該數值為1

  6、rmem_default - 預設的接收視窗大小

  7、rmem_max - 接收視窗的最大大小

  8、wmem_default - 預設的傳送視窗大小

  9. wmem_max - 傳送視窗的最大大小

  /proc目錄下的所有內容都是臨時性的,所以重啟動系統後任何修改都會丟失。

  建議在系統啟動時自動修改TCP/IP引數:

  把下面程式碼增加到/etc/rc.local檔案,然後儲存檔案,系統重新引導的時候會自動修改下面的TCP/IP引數:

  echo 256960 > /proc/sys/net/core/rmem_default

  echo 256960 > /proc/sys/net/core/rmem_max

  echo 256960 > /proc/sys/net/core/wmem_default

  echo 256960 > /proc/sys/net/core/wmem_max

  echo 0 > /proc/sys/net/ipv4/tcp_timestamps

  echo 1 > /proc/sys/net/ipv4/tcp_sack

  echo 1 > /proc/sys/net/ipv4/tcp_window_scaling

  TCP/IP引數都是自解釋的,TCP視窗大小設定為256960,禁止TCP的時間戳(取消在每個資料包的頭中增加12位元組),支援更大的TCP視窗和TCP有選擇的應答。

  上面數值的設定是根據互連網連線和最大頻寬/延遲率來決定。

  注:上面例項中的數值可以實際應用, 但它只包含了一部分引數。

  另外一個方法:使用 /etc/sysctl.conf 在系統啟動時將引數配置成您所設定的值:

  net.core.rmem_default = 256960

  net.core.rmem_max = 256960

  net.core.wmem_default = 256960

  net.core.wmem_max = 256960

  net.ipv4.tcp_timestamps = 0

  net.ipv4.tcp_sack =1

  net.ipv4.tcp_window_scaling = 1

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

  /proc/sys/fs/super-max

  該檔案指定超級塊處理程式的最大數目。掛裝的任何檔案系統需要使用超級塊,所以如果掛裝了大量檔案系統,則可能會用盡超級塊處理程式。

  預設設定:256

  /proc/sys/fs/super-nr

  該檔案顯示當前已分配超級塊的數目。該檔案是隻讀的,僅用於顯示資訊。

  /proc/sys/kernel

  /proc/sys/kernel/acct

  該檔案有三個可配置值,根據包含日誌的檔案系統上可用空間的數量(以百分比表示),這些值控制何時開始進行程式記帳:

  ● 如果可用空間低於這個百分比值,則停止程式記帳

  ● 如果可用空間高於這個百分比值,則開始程式記帳

  ● 檢查上面兩個值的頻率(以秒為單位)

  ● 要更改這個檔案的某個值,應該回送用空格分隔開的一串數字。

  預設設定:2 4 30

  如果包含日誌的檔案系統上只有少於 2% 的可用空間,則這些值會使記帳停止,如果有 4% 或更多可用空間,則再次啟動記帳。每 30 秒做一次檢查。

  /proc/sys/kernel/ctrl-alt-del

  該檔案有一個二進位制值,該值控制系統在接收到 ctrl+alt+delete 按鍵組合時如何反應。這兩個值表示:

  ● 零(0)值表示捕獲 ctrl+alt+delete,並將其送至 init 程式。這將允許系統可以完美地關閉和重啟,就好象您輸入 shutdown 命令一樣。

  ● 壹(1)值表示不捕獲 ctrl+alt+delete,將執行非乾淨的關閉,就好象直接關閉電源一樣。

  預設設定:0

  /proc/sys/kernel/domainname

  該檔案允許您配置網路域名。它沒有預設值,也許已經設定了域名,也許沒有設定。

  /proc/sys/kernel/hostname

  該檔案允許您配置網路主機名。它沒有預設值,也許已經設定了主機名,也許沒有設定。

  /proc/sys/kernel/msgmax

  該檔案指定了從一個程式傳送到另一個程式的訊息的最大長度。程式間的訊息傳遞是在核心的記憶體中進行,不會交換到磁碟上,所以如果增加該值,則將增加作業系統所使用的記憶體數量。

  預設設定:8192

  /proc/sys/kernel/msgmnb

  該檔案指定在一個訊息佇列中最大的位元組數。

  預設設定:16384

  /proc/sys/kernel/msgmni

  該檔案指定訊息佇列標識的最大數目。

  預設設定:16

  /proc/sys/kernel/panic

  該檔案表示如果發生"核心嚴重錯誤(kernel panic)",則核心在重新引導之前等待的時間(以秒為單位)。零(0)秒設定在發生核心嚴重錯誤時將禁止重新引導。

  預設設定:0

  /proc/sys/kernel/printk

  該檔案有四個數字值,它們根據日誌記錄訊息的重要性,定義將其傳送到何處。關於不同日誌級別的更多資訊,請閱讀 syslog(2) 聯機幫助頁。該檔案的四個值為:

  ● 控制檯日誌級別:優先順序高於該值的訊息將被列印至控制檯

  ● 預設的訊息日誌級別:將用該優先順序來列印沒有優先順序的訊息

  ● 最低的控制檯日誌級別:控制檯日誌級別可被設定的最小值(最高優先順序)

  ● 預設的控制檯日誌級別:控制檯日誌級別的預設值

  預設設定:6 4 1 7

  /proc/sys/kernel/shmall

  該檔案是在任何給定時刻系統上可以使用的共享記憶體的總量(以位元組為單位)。

  預設設定:2097152

  /proc/sys/kernel/shmax

  該檔案指定核心所允許的最大共享記憶體段的大小(以位元組為單位)。

  預設設定:33554432

  /proc/sys/kernel/shmmni

  該檔案表示用於整個系統共享記憶體段的最大數目。

  預設設定:4096

  /proc/sys/kernel/sysrq

  如果該檔案指定的值為非零,則啟用 System Request Key.

  預設設定:0

  /proc/sys/kernel/threads-max

  該檔案指定核心所能使用的執行緒的最大數目。

  預設設定:2048

  /proc/sys/net

  /proc/sys/net/core/message_burst

  寫新的警告訊息所需的時間(以 1/10 秒為單位);在這個時間內所接收到的其它警告訊息會被丟棄。這用於防止某些企圖用訊息"淹沒"您系統的人所使用的拒絕服務(Denial of Service)攻擊。

  預設設定:50(5 秒)

  /proc/sys/net/core/message_cost

該檔案存有與每個警告訊息相關的成本值。該值越大,越有可能忽略警告訊息。

  預設設定:5

  /proc/sys/net/core/netdev_max_backlog

  該檔案指定了,在介面接收資料包的速率比核心處理這些包的速率快時,允許送到佇列的資料包的最大數目。

  預設設定:300

  /proc/sys/net/core/optmem_max

  該檔案指定了每個套接字所允許的最大緩衝區的大小。

  /proc/sys/net/core/rmem_default

  該檔案指定了接收套接字緩衝區大小的預設值(以位元組為單位)。

  /proc/sys/net/core/rmem_max

  該檔案指定了接收套接字緩衝區大小的最大值(以位元組為單位)。

  /proc/sys/net/core/wmem_default

  該檔案指定了傳送套接字緩衝區大小的預設值(以位元組為單位)。

  /proc/sys/net/core/wmem_max

  該檔案指定了傳送套接字緩衝區大小的最大值(以位元組為單位)。

  /proc/sys/net/ipv4

  所有 IPv4 和 IPv6 的引數都被記錄在核心原始碼文件中。請參閱檔案 /usr/src/linux/Documentation/networking/ip-sysctl.txt.

  /proc/sys/net/ipv6

  同 IPv4.

  /proc/sys/vm

  /proc/sys/vm/buffermem

  該檔案控制用於緩衝區記憶體的整個系統記憶體的數量(以百分比表示)。它有三個值,透過把用空格相隔的一串數字寫入該檔案來設定這三個值。

  用於緩衝區的記憶體的最低百分比

  如果發生所剩系統記憶體不多,而且系統記憶體正在減少這種情況,系統將試圖維護緩衝區記憶體的數量。

  用於緩衝區的記憶體的最高百分比

  預設設定:2 10 60

  /proc/sys/vm/freepages

  該檔案控制系統如何應對各種級別的可用記憶體。它有三個值,透過把用空格相隔的一串數字寫入該檔案來設定這三個值。

  ● 如果系統中可用頁面的數目達到了最低限制,則只允許核心分配一些記憶體。

  ● 如果系統中可用頁面的數目低於這一限制,則核心將以較積極的方式啟動交換,以釋放記憶體,從而維持系統效能。

  ● 核心將試圖保持這個數量的系統記憶體可用。低於這個值將啟動核心交換。

  預設設定:512 768 1024

  /proc/sys/vm/kswapd

  該檔案控制允許核心如何交換記憶體。它有三個值,透過把用空格相隔的一串數字寫入該檔案來設定這三個值:

  ● 核心試圖一次釋放的最大頁面數目。如果想增加記憶體交換過程中的頻寬,則需要增加該值。

  ● 核心在每次交換中試圖釋放頁面的最少次數。

  ● 核心在一次交換中所寫頁面的數目。這對系統效能影響最大。這個值越大,交換的資料越多,花在磁碟尋道上的時間越少。然而,這個值太大會因"淹沒"請求佇列而反過來影響系統效能。

  預設設定:512 32 8

  /proc/sys/vm/pagecache

  該檔案與 /proc/sys/vm/buffermem 的工作內容一樣,但它是針對檔案的記憶體對映和一般快取記憶體。

  使核心設定具有永續性

  這裡提供了一個方便的實用程式,用於更改 /proc/sys 目錄下的任何核心引數。它使您可以更改執行中的核心(類似於上面用到的 echo 和重定向方法),但它還有一個在系統引導時執行的配置檔案。這使您可以更改執行中的核心,並將這些更改新增到配置檔案,以便於在系統重新引導之後,這些更改仍然生效。

  該實用程式稱為 sysctl,在 sysctl(8) 的聯機幫助頁中,對這個實用程式進行了完整的文件說明。sysctl 的配置檔案是 /etc/sysctl.conf,可以編輯該檔案,並在 sysctl.conf(8) 下記錄了該檔案。sysctl 將 /proc/sys 下的檔案視為可以更改的單個變數。所以,以 /proc/sys 下的檔案 /proc/sys/fs/file-max 為例,它表示系統中所允許的檔案控制程式碼的最大數目,這個檔案被表示成 fs.file-max.

  這個示例揭示了 sysctl 表示法中的一些奇妙事情。由於 sysctl 只能更改 /proc/sys 目錄下的變數,並且人們始終認為變數是在這個目錄下,因此省略了變數名的那一部分(/proc/sys)。另一個要說明的更改是,將目錄分隔符(正斜槓 /)換成了英文中的句號(點 .)。

  將 /proc/sys 中的檔案轉換成 sysctl 中的變數有兩個簡單的規則:

  ● 去掉前面部分 /proc/sys.

  ● 將檔名中的正斜槓變為點。

  這兩條規則使您能將 /proc/sys 中的任一檔名轉換成 sysctl 中的任一變數名。一般檔案到變數的轉換為:

  /proc/sys/dir/file --> dir.file

  dir1.dir2.file --> /proc/sys/dir1/dir2/file

  可以使用命令 sysctl -a 檢視所有可以更改的變數和其當前設定。

  用 sysctl 還可以更改變數,它所做的工作與上面所用的 echo 方法完全一樣。其表示法為:

  sysctl -w dir.file="value"

  還是用 file-max 作為示例,使用下面兩種方法中的一種將該值更改為 16384.


相關文章