系統調優之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
SYN重試次數。
10.echo 3 > /proc/sys/net/ipv4/tcp_syn_retries
SYN重試次數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章