天天看點

LINUX系統調優

 所有的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

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

二、檔案及檔案系統調諧

塊大小

使用較大的塊大小将得到較好的性能。将ext2檔案系統的塊大小調整為4096byte而不是預設的1024byte,可以減少檔案碎片,另外,在ext2的檔案系統中,為根目錄保留了5%的空間,對一個大的檔案系統,除非用作日志檔案,5%的比例有些過多。可以使用指令"# mke2fs -b 4096 -m 1 /dev/hda6"将它改為1%并以塊大小4096byte建立檔案系統。如果系統用作郵件或者新聞伺服器,使用較大的塊大小,雖然性能有所提高,但會造成磁盤空間較大的浪費。比如檔案系統中的檔案平均大小為2145byte,如果使用4096byte的塊大小,平均每一個檔案就會浪費1951byte 空間。如果使用1024byte的塊大小,平均每一個檔案會浪費927byte空間。在性能和磁盤的代價上如何平衡,要看具體應用的需要。

調整緩沖區重新整理參數

Linux核心中,包含了一些對于系統運作态的可設定參數。緩沖重新整理的參數可通過

/proc/sys/vm/bdflush檔案來完成,這個檔案的格式是這樣的:

# more /proc/sys/vm/bdflush

40 0 0 0 500 3000 60 0 0 

第一個數:在"dirty"緩沖區達到多少的時候強制喚醒bdflush程序重新整理硬碟,

第二個數:每次讓bdflush程序重新整理多少個dirty塊。所謂dirty塊是必須寫到磁盤中的緩存塊。接下的數:每次允許bd flush将多少個記憶體塊排入空閑的緩沖塊清單。

修改方法

# echo "100 128 128 512 5000 3000 60 0 0">/proc/sys/vm/bdflush 并将這條指令加到/etc/rc.d/rc.local檔案中去。

以上的設定加大了緩沖區大小,降低了bdflush被啟動的頻度,同時也增加了萬一系統崩潰丢失資料的危險性。VFS的緩沖重新整理是Linux檔案系統高效的重要原因之一。

調整檔案句柄數和i-節點數

在Linux核心2.4.x中需要修改源代碼,然後重新編譯核心才生效。編輯Linux核心源代碼中的 

include/linux/fs.h檔案,将 NR_FILE 由8192改為 65536,将NR_RESERVED_FILES 由10 改為 128。編輯fs/inode.c 檔案将 MAX_INODE 由16384改為262144。

一般情況下,最大打開檔案數比較合理的設定為每4M實體記憶體256,比如256M記憶體可以設為16384,而最大的使用的i節點的數目應該是最大打開檔案數目的3倍到4倍。

三、其它方面的調諧

調諧buffermem

檔案buffermen和核心虛拟記憶體子系統密切相關。檔案/proc/sys/vm/buffermem控制多大記憶體被用于緩沖區(百分數表示)。核心2.4的預設值為:: "2 10 60"。可以按如下方法修改:

# echo "70 10 60" >/proc/sys/vm/buffermem

并将之加到腳本檔案/etc/rc.d/rc.local 中。或者在/etc/sysctl.conf檔案中加入

vm.buffermem = 70 10 60

第一個參數 70意味着至少配置設定70%的記憶體用作緩沖區。後兩個參數保持系統的預設值。第一個參數設定為多大合适,依賴于系統的記憶體大小和系統高負載時記憶體的使用情況(可用free監視)。

程序限制

Linux對于每個使用者,系統限制其最大程序數。為提高性能,可以設定超級使用者root的最大程序數為無限。編輯.bashrc檔案(vi /root/.bashrc)增加行"ulimit -u unlimited"即可消除超級使用者的程序限制。

核心和系統對使用者程序其它的一些限制也可以通過ulimit指令來檢視和更改。"ulimit -a" 用來顯示目前的各種使用者程序限制。一些更改使用者限制的例子如下:

ulimit -n 4096 将每個程序可以打開的檔案數目加大到4096,預設為1024

ulimit -m 4096 限制每個程序使用的記憶體數。

優化gcc編譯

将優化标志放在/etc/profile檔案中。在pentium III級的處理器上使用以下優化标志将得到最優的應用程式:

CFLAGS=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions

再将如下行加到/etc/profile 更靠後的位置:

export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL INPUTRC CFLAGS LANG LESSCHARSET使用以上的優化,gcc或者egcs編譯的程式将得到最佳的性能。

/proc/sys/kernel/shmall 

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

預設設定:2097152

/proc/sys/kernel/shmax 

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

預設設定:33554432

/proc/sys/kernel/shmmni 

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

預設設定:4096

/proc/sys/kernel/threads-max 

該檔案指定核心所能使用的線程的最大數目。 

預設設定:2048

/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。

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

LINUX系統調優記錄:

解決 “dst cache overflow” 報警問題

OS:centos4.3

1.可以改變滑動視窗的大小 (預設應該就是“1”)

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

2.修改核心共享記憶體限制為256M,預設才2M

echo 268435456 >/proc/sys/kernel/shmall

echo 268435456 >/proc/sys/kernel/shmmax

3。可使用的代理端口

echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range

4.禁止廣播和ping入

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

5./proc/sys/net/ipv4/netfilter/ip_conntrack_max 改大到 268435456 預設隻有65536

6.echo "1800" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

預設确立連接配接會在5天後失效,改為半小時後失效,減少ip_conntrack的有效連接配接數量。

7.echo 1 > /proc/sys/net/ipv4/tcp_syncookies

防範SYN DDOS攻擊,打開TCPsyncookies,CENTOS4的核心是支援的。

8.echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog

SYN列隊長度,不要設定太高,會消耗相應的記憶體。

9.echo 3 > /proc/sys/net/ipv4/tcp_synack_retries

繼續閱讀