設置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf優化方案)

Sysctl是一個允許您改變正在運行中的Linux系統的接口。它包含一些 TCP/IP 堆棧和虛擬內存系統的高級選項, 這可以讓有經驗的管理員提高引人注目的系統性能。用sysctl可以讀取設置超過五百個系統變量。基於這點,sysctl(8) 提供兩個功能:讀取和修改系統設置。

查看所有可讀變量:

% sysctl -a

讀一個指定的變量,例如 kern.maxproc:


% sysctl kern.maxproc kern.maxproc: 1044

要設置一個指定的變量,直接用 variable=value 這樣的語法:

# sysctl kern.maxfiles=5000

kern.maxfiles: 2088 -> 5000

您可以使用sysctl修改系統變量,也可以通過編輯sysctl.conf文件來修改系統變量。sysctl.conf 看起來很像 rc.conf。它用 variable=value 的形式來設定值。指定的值在系統進入多用戶模式之後被設定。並不是所有的變量都可以在這個模式下設定。

sysctl 變量的設置通常是字符串、數字或者布爾型。 (布爾型用 1 來表示’yes’,用 0 來表示’no’)。

sysctl -w kernel.sysrq=0

sysctl -w kernel.core_uses_pid=1

sysctl -w net.ipv4.conf.default.accept_redirects=0

sysctl -w net.ipv4.conf.default.accept_source_route=0

sysctl -w net.ipv4.conf.default.rp_filter=1

sysctl -w net.ipv4.tcp_syncookies=1

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

sysctl -w net.ipv4.tcp_fin_timeout=30

sysctl -w net.ipv4.tcp_synack_retries=2

sysctl -w net.ipv4.tcp_keepalive_time=3600

sysctl -w net.ipv4.tcp_window_scaling=1

sysctl -w net.ipv4.tcp_sack=1

配置sysctl

編輯此文件:

vi /etc/sysctl.conf

如果該文件爲空,則輸入以下內容,否則請根據情況自己做調整:

# Controls source route verification

# Default should work for all interfaces

net.ipv4.conf.default.rp_filter = 1

# net.ipv4.conf.all.rp_filter = 1

# net.ipv4.conf.lo.rp_filter = 1

# net.ipv4.conf.eth0.rp_filter = 1

# Disables IP source routing

# Default should work for all interfaces

net.ipv4.conf.default.accept_source_route = 0

# net.ipv4.conf.all.accept_source_route = 0

# net.ipv4.conf.lo.accept_source_route = 0

# net.ipv4.conf.eth0.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel

kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.

# Useful for debugging multi-threaded applications.

kernel.core_uses_pid = 1

# Increase maximum amount of memory allocated to shm

# Only uncomment if needed!

# kernel.shmmax = 67108864

# Disable ICMP Redirect Acceptance

# Default should work for all interfaces

net.ipv4.conf.default.accept_redirects = 0

# net.ipv4.conf.all.accept_redirects = 0

# net.ipv4.conf.lo.accept_redirects = 0

# net.ipv4.conf.eth0.accept_redirects = 0

# Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets

# Default should work for all interfaces

net.ipv4.conf.default.log_martians = 1

# net.ipv4.conf.all.log_martians = 1

# net.ipv4.conf.lo.log_martians = 1

# net.ipv4.conf.eth0.log_martians = 1

# Decrease the time default value for tcp_fin_timeout connection

net.ipv4.tcp_fin_timeout = 25

# Decrease the time default value for tcp_keepalive_time connection

net.ipv4.tcp_keepalive_time = 1200

# Turn on the tcp_window_scaling

net.ipv4.tcp_window_scaling = 1

# Turn on the tcp_sack

net.ipv4.tcp_sack = 1

# tcp_fack should be on because of sack

net.ipv4.tcp_fack = 1

# Turn on the tcp_timestamps

net.ipv4.tcp_timestamps = 1

# Enable TCP SYN Cookie Protection

net.ipv4.tcp_syncookies = 1

# Enable ignoring broadcasts request

net.ipv4.icmp_echo_ignore_broadcasts = 1

# Enable bad error message Protection

net.ipv4.icmp_ignore_bogus_error_responses = 1

# Make more local ports available

# net.ipv4.ip_local_port_range = 1024 65000

# Set TCP Re-Ordering value in kernel to ‘5′

net.ipv4.tcp_reordering = 5

# Lower syn retry rates

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 3

# Set Max SYN Backlog to ‘2048′

net.ipv4.tcp_max_syn_backlog = 2048

# Various Settings

net.core.netdev_max_backlog = 1024

# Increase the maximum number of skb-heads to be cached

net.core.hot_list_length = 256

# Increase the tcp-time-wait buckets pool size

net.ipv4.tcp_max_tw_buckets = 360000

# This will increase the amount of memory available for socket input/output queues

net.core.rmem_default = 65535

net.core.rmem_max = 8388608

net.ipv4.tcp_rmem = 4096 87380 8388608

net.core.wmem_default = 65535

net.core.wmem_max = 8388608

net.ipv4.tcp_wmem = 4096 65535 8388608

net.ipv4.tcp_mem = 8388608 8388608 8388608

net.core.optmem_max = 40960

如果希望屏蔽別人 ping 你的主機,則加入以下代碼:

# Disable ping requests

net.ipv4.icmp_echo_ignore_all = 1

編輯完成後,請執行以下命令使變動立即生效:

/sbin/sysctl -p

/sbin/sysctl -w net.ipv4.route.flush=1

 

################### 
所有rfc相關的選項都是默認啓用的,因此網上的那些還自己寫rfc支持的都可以扔掉了:) 
############################### 

net.inet.ip.sourceroute=0 
net.inet.ip.accept_sourceroute=0 
############################# 
通過源路由,攻擊者可以嘗試到達內部IP地址 --包括RFC1918中的地址,所以 
不接受源路由信息包可以防止你的內部網絡被探測。 
################################# 

net.inet.tcp.drop_synfin=1 
################################### 
安全參數,編譯內核的時候加了options TCP_DROP_SYNFIN纔可以用,可以阻止某些OS探測。 
################################## 

kern.maxvnodes=8446 
#################http://www.bsdlover.cn######### 
vnode 是對文件或目錄的一種內部表達。 因此, 增加可以被操作系統利用的 vnode 數量將降低磁盤的 I/O。 
一般而言, 這是由操作系統自行完成的,也不需要加以修改。但在某些時候磁盤 I/O 會成爲瓶頸, 
而系統的 vnode 不足, 則這一配置應被增加。此時需要考慮是非活躍和空閒內存的數量。 
要查看當前在用的 vnode 數量: 
# sysctl vfs.numvnodes 
vfs.numvnodes: 91349 
要查看最大可用的 vnode 數量: 
# sysctl kern.maxvnodes 
kern.maxvnodes: 100000 
如果當前的 vnode 用量接近最大值,則將 kern.maxvnodes 值增大 1,000 可能是個好主意。 
您應繼續查看 vfs.numvnodes 的數值, 如果它再次攀升到接近最大值的程度, 
仍需繼續提高 kern.maxvnodes。 在 top(1) 中顯示的內存用量應有顯著變化, 
更多內存會處於活躍 (active) 狀態。 
#################################### 


kern.maxproc: 964 
#################http://www.bsdlover.cn######### 
Maximum number of processes 
#################################### 
kern.maxprocperuid: 867 
#################http://www.bsdlover.cn######### 
Maximum processes allowed per userid 
#################################### 
因爲我的maxusers設置的是256,20+16*maxusers=4116。 
maxprocperuid至少要比maxproc少1,因爲init(8) 這個系統程序絕對要保持在運作狀態。 
我給它設置的2068。 


kern.maxfiles: 1928 
#################http://www.bsdlover.cn######### 
系統中支持最多同時開啓的文件數量,如果你在運行數據庫或大的很吃描述符的進程,那麼應該設置在20000以上, 
比如kde這樣的桌面環境,它同時要用的文件非常多。 
一般推薦設置爲32768或者65536。 
#################################### 

kern.argmax: 262144 
#################http://www.bsdlover.cn######### 
maximum number of bytes (or characters) in an argument list. 
命令行下最多支持的參數,比如你在用find命令來批量刪除一些文件的時候 
find . -name "*.old" -delete,如果文件數超過了這個數字,那麼會提示你數字太多的。 
可以利用find . -name "*.old" -ok rm {} \;來刪除。 
默認的參數已經足夠多了,因此不建議再做修改。 
#################################### 

kern.securelevel: -1 
#################http://www.bsdlover.cn######### 
-1:這是系統默認級別,沒有提供任何內核的保護錯誤;  
0:基本上作用不多,當你的系統剛啓動就是0級別的,當進入多用戶模式的時候就自動變成1級了。  
1:在這個級別上,有如下幾個限制:  
  a. 不能通過kldload或者kldunload加載或者卸載可加載內核模塊;  
  b. 應用程序不能通過/dev/mem或者/dev/kmem直接寫內存;  
  c. 不能直接往已經裝在(mounted)的磁盤寫東西,也就是不能格式化磁盤,但是可以通過標準的內核接口執行寫操作;  
  d. 不能啓動X-windows,同時不能使用chflags來修改文件屬性;  
2:在 1 級別的基礎上還不能寫沒裝載的磁盤,而且不能在1秒之內製造多次警告,這個是防止DoS控制檯的;  
3:在 2 級別的級別上不允許修改IPFW防火牆的規則。  
  如果你已經裝了防火牆,並且把規則設好了,不輕易改動,那麼建議使用3級別,如果你沒有裝防火牆,而且還準備裝防火牆的話,不建議使用。 
我們這裏推薦使用 2 級別,能夠避免比較多對內核攻擊。 
#################################### 

kern.maxfilesperproc: 1735 
#################http://www.bsdlover.cn######### 
每個進程能夠同時打開的最大文件數量,網上很多資料寫的是32768 
除非用異步I/O或大量線程,打開這麼多的文件恐怕是不太正常的。 
我個人建議不做修改,保留默認。 
#################################### 


kern.ipc.maxsockbuf: 262144 
#################http://www.bsdlover.cn######### 
最大的套接字緩衝區,網上有建議設置爲2097152(2M)、8388608(8M)的。 
我個人倒是建議不做修改,保持默認的256K即可,緩衝區大了可能造成碎片、阻塞或者丟包。 
#################################### 


kern.ipc.somaxconn: 128 
#################http://www.bsdlover.cn######### 
最大的等待連接完成的套接字隊列大小,即併發連接數。 
高負載服務器和受到Dos攻擊的系統也許會因爲這個隊列被塞滿而不能提供正常服務。 
默認爲128,推薦在1024-4096之間,根據機器和實際情況需要改動,數字越大佔用內存也越大。 
#################################### 


kern.ipc.nmbclusters: 4800 
#################http://www.bsdlover.cn######### 
這個值用來調整系統在開機後所要分配給網絡 mbufs 的 cluster 數量, 
由於每個 cluster 大小爲 2K,所以當這個值爲 1024 時,也是會用到 2MB 的核心內存空間。 
假設我們的網頁同時約有 1000 個聯機,而 TCP 傳送及接收的暫存區大小都是 16K, 
則最糟的情況下,我們會需要 (16K+16K) * 1024,也就是 32MB 的空間, 
然而所需的 mbufs 大概是這個空間的二倍,也就是 64MB,所以所需的 cluster 數量爲 64MB/2K,也就是 32768。 
對於內存有限的機器,建議值是 1024 到 4096 之間,而當擁有海量存儲器空間時,我們可以將它設定爲 4096 到 32768 之間。 
我們可以使用 netstat 這個指令並加上參數 -m 來查看目前所使用的 mbufs 數量。 
要修改這個值必須在一開機就修改,所以只能在 /boot/loader.conf 中加入修改的設定 
kern.ipc.nmbclusters=32768 
#################################### 


kern.ipc.shmmax: 33554432 
#################http://www.bsdlover.cn######### 
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟件將無法啓動 
安裝xine和mplayer提示的設置爲67108864,即64M, 
如果內存多的話,可以設置爲134217728,即128M 
#################################### 


kern.ipc.shmall: 8192 
#################http://www.bsdlover.cn######### 
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟件將無法啓動 
安裝xine和mplayer提示的設置爲32768 
#################################### 

kern.ipc.shm_use_phys: 0 
#################http://www.bsdlover.cn######### 
如果我們將它設成 1,則所有 System V 共享內存 (share memory,一種程序間溝通的方式)部份都會被留在實體的內存 (physical memory) 中,
而不會被放到硬盤上的 swap 空間。我們知道物理內存的存取速度比硬盤快許多,而當物理內存空間不足時, 
部份數據會被放到虛擬的內存上,從物理內存和虛擬內存之間移轉的動作就叫作 swap。如果時常做 swap 的動作, 
則需要一直對硬盤作 I/O,速度會很慢。因此,如果我們有大量的程序 (數百個) 需要共同分享一個小的共享內存空間, 
或者是共享內存空間很大時,我們可以將這個值打開。 
這一項,我個人建議不做修改,除非你的內存非常大。 
#################################### 


kern.ipc.shm_allow_removed: 0 
#################http://www.bsdlover.cn######### 
共享內存是否允許移除?這項似乎是在fb下裝vmware需要設置爲1的,否則會有加載SVGA出錯的提示 
作爲服務器,這項不動也罷。 
#################################### 

kern.ipc.numopensockets: 12 
#################http://www.bsdlover.cn######### 
已經開啓的socket數目,可以在最繁忙的時候看看它是多少,然後就可以知道maxsockets應該設置成多少了。 
#################################### 

kern.ipc.maxsockets: 1928 
#################http://www.bsdlover.cn######### 
這是用來設定系統最大可以開啓的 socket 數目。如果您的服務器會提供大量的 FTP 服務, 
而且常快速的傳輸一些小檔案,您也許會發現常傳輸到一半就中斷。因爲 FTP 在傳輸檔案時, 
每一個檔案都必須開啓一個 socket 來傳輸,但關閉 socket 需要一段時間,如果傳輸速度很快, 
而檔案又多,則同一時間所開啓的 socket 會超過原本系統所許可的值,這時我們就必須把這個值調大一點。 
除了 FTP 外,也許有其它網絡程序也會有這種問題。 
然而,這個值必須在系統一開機就設定好,所以如果要修改這項設定,我們必須修改 /boot/loader.conf 才行 
kern.ipc.maxsockets="16424" 
#################################### 

kern.ipc.nsfbufs: 1456 
#################http://www.bsdlover.cn######### 
經常使用 sendfile(2) 系統調用的繁忙的服務器,  
有必要通過 NSFBUFS 內核選項或者在 /boot/loader.conf (查看 loader(8) 以獲得更多細節) 中設置它的值來調節 sendfile(2) 緩存數量。
這個參數需要調節的普通原因是在進程中看到 sfbufa 狀態。sysctl kern.ipc.nsfbufs 變量在內核配置變量中是隻讀的。  
這個參數是由 kern.maxusers 決定的,然而它可能有必要因此而調整。 
在/boot/loader.conf里加入 
kern.ipc.nsfbufs="2496" 
#################################### 


kern.maxusers: 59 
#################http://www.bsdlover.cn######### 
maxusers 的值決定了處理程序所容許的最大值,20+16*maxusers 就是你將得到的所容許處理程序。 
系統一開機就必須要有 18 個處理程序 (process),即便是簡單的執行指令 man 又會產生 9 個 process, 
所以將這個值設爲 64 應該是一個合理的數目。 
如果你的系統會出現 proc table full 的訊息的話,可以就把它設大一點,例如 128。 
除非您的系統會需要同時開啓很多檔案,否則請不要設定超過 256。 

可以在 /boot/loader.conf 中加入該選項的設定, 
kern.maxusers=256 
#################################### 

kern.coredump: 1 
#################http://www.bsdlover.cn######### 
如果設置爲0,則程序異常退出時不會生成core文件,作爲服務器,不建議這樣。 
#################################### 

kern.corefile: %N.core 
#################http://www.bsdlover.cn######### 
可設置爲kern.corefile="/data/coredump/%U-%P-%N.core" 
其中 %U是UID,%P是進程ID,%N是進程名,當然/data/coredump必須是一個實際存在的目錄 
#################################### 


vm.swap_idle_enabled: 0 
vm.swap_idle_threshold1: 2 
vm.swap_idle_threshold2: 10 
######################### 
在有很多用戶進入、離開系統和有很多空閒進程的大的多用戶系統中很有用。 
可以讓進程更快地進入內存,但它會吃掉更多的交換和磁盤帶寬。 
系統默認的頁面調度算法已經很好了,最好不要更改。 
######################## 


vfs.ufs.dirhash_maxmem: 2097152 
######################### 
默認的dirhash最大內存,默認2M 
增加它有助於改善單目錄超過100K個文件時的反覆讀目錄時的性能 
建議修改爲33554432(32M) 
############################# 


vfs.vmiodirenable: 1 
################# 
這個變量控制目錄是否被系統緩存。大多數目錄是小的,在系統中只使用單個片斷(典型的是1K)並且在緩存中使用的更小 (典型的是512字節)。 
當這個變量設置爲關閉 (0) 時,緩存器僅僅緩存固定數量的目錄,即使您有很大的內存。  
而將其開啓 (設置爲1) 時,則允許緩存器用 VM 頁面緩存來緩存這些目錄,讓所有可用內存來緩存目錄。 
不利的是最小的用來緩存目錄的核心內存是大於 512 字節的物理頁面大小(通常是 4k)。 
我們建議如果您在運行任何操作大量文件的程序時保持這個選項打開的默認值。  
這些服務包括 web 緩存,大容量郵件系統和新聞系統。 
儘管可能會浪費一些內存,但打開這個選項通常不會降低性能。但還是應該檢驗一下。 
#################### 


vfs.hirunningspace: 1048576 
############################ 
這個值決定了系統可以將多少數據放在寫入儲存設備的等候區。通常使用默認值即可, 
但當我們有多顆硬盤時,我們可以將它調大爲 4MB 或 5MB。 
注意這個設置成很高的值(超過緩存器的寫極限)會導致壞的性能。 
不要盲目的把它設置太高!高的數值會導致同時發生的讀操作的遲延。 
############################# 


vfs.write_behind: 1 
######################### 
這個選項預設爲 1,也就是打開的狀態。在打開時,在系統需要寫入數據在硬盤或其它儲存設備上時, 
它會等到收集了一個 cluster 單位的數據後再一次寫入,否則會在一個暫存區空間有寫入需求時就立即寫到硬盤上。 
這個選項打開時,對於一個大的連續的文件寫入速度非常有幫助。但如果您遇到有很多行程延滯在等待寫入動作時,您可能必須關閉這個功能。 
############################ 

net.local.stream.sendspace: 8192 
################################## 
本地套接字連接的數據發送空間 
建議設置爲65536 
################################### 
net.local.stream.recvspace: 8192 
################################## 
本地套接字連接的數據接收空間 
建議設置爲65536 
################################### 


net.inet.ip.portrange.lowfirst: 1023 
net.inet.ip.portrange.lowlast: 600 
net.inet.ip.portrange.first: 49152 
net.inet.ip.portrange.last: 65535 
net.inet.ip.portrange.hifirst: 49152 
net.inet.ip.portrange.hilast: 65535 
################### 
以上六項是用來控制TCP及UDP所使用的port範圍,這個範圍被分成三個部份,低範圍、預設範圍、及高範圍。 
這些是你的服務器主動發起連接時的臨時端口的範圍,預設的已經1萬多了,一般的應用就足夠了。 
如果是比較忙碌的FTP server,一般也不會同時提供給1萬多人訪問的, 
當然如果很不幸,你的服務器就要提供很多,那麼可以修改first的值,比如直接用1024開始 
######################### 


net.inet.ip.redirect: 1 
######################### 
設置爲0,屏蔽ip重定向功能 
########################### 

net.inet.ip.rtexpire: 3600 
net.inet.ip.rtminexpire: 10 
######################## 
很多apache產生的CLOSE_WAIT狀態,這種狀態是等待客戶端關閉,但是客戶端那邊並沒有正常的關閉,於是留下很多這樣的東東。 
建議都修改爲2 
######################### 


net.inet.ip.intr_queue_maxlen: 50 
######################## 
Maximum size of the IP input queue,如果下面的net.inet.ip.intr_queue_drops一直在增加, 
那就說明你的隊列空間不足了,那麼可以考慮增加該值。 
########################## 
net.inet.ip.intr_queue_drops: 0 
#################### 
Number of packets dropped from the IP input queue,如果你sysctl它一直在增加, 
那麼增加net.inet.ip.intr_queue_maxlen的值。 
####################### 


net.inet.ip.fastforwarding: 0 
############################# 
如果打開的話每個目標地址一次轉發成功以後它的數據都將被記錄進路由表和arp數據表,節約路由的計算時間 
但會需要大量的內核內存空間來保存路由表。 
如果內存夠大,打開吧,呵呵 
############################# 


net.inet.ip.random_id: 0 
##################### 
默認情況下,ip包的id號是連續的,而這些可能會被攻擊者利用,比如可以知道你nat後面帶了多少主機。 
如果設置成1,則這個id號是隨機的,嘿嘿。 
##################### 

net.inet.icmp.maskrepl: 0 
############################ 
防止廣播風暴,關閉其他廣播探測的響應。默認即是,無須修改。 
############################### 

net.inet.icmp.icmplim: 200 
############################## 
限制系統發送ICMP速率,改爲100吧,或者保留也可,並不會給系統帶來太大的壓力。 
########################### 
net.inet.icmp.icmplim_output: 1 
################################### 
如果設置成0,就不會看到提示說Limiting icmp unreach response from 214 to 200 packets per second 等等了
不過禁止輸出容易讓我們忽視攻擊的存在。這個自己看着辦吧。 
###################################### 

net.inet.icmp.drop_redirect: 0 
net.inet.icmp.log_redirect: 0 
################################### 
設置爲1,屏蔽ICMP重定向功能 
################################### 
net.inet.icmp.bmcastecho: 0 
############################ 
防止廣播風暴,關閉廣播ECHO響應,默認即是,無須修改。 
############################### 


net.inet.tcp.mssdflt: 512 
net.inet.tcp.minmss: 216 
############################### 
數據包數據段最小值,以上兩個選項最好不動!或者只修改mssdflt爲1460,minmss不動。 
原因詳見http://www.bsdlover.cn/security/2007/1211/article_4.html 
############################# 


net.inet.tcp.keepidle: 7200000 
###################### 
TCP的套接字的空閒時間,默認時間太長,可以改爲600000(10分鐘)。 
########################## 

net.inet.tcp.sendspace: 32768 
#################http://www.bsdlover.cn######### 
最大的待發送TCP數據緩衝區空間,應用程序將數據放到這裏就認爲發送成功了,系統TCP堆棧保證數據的正常發送。 
#################################### 
net.inet.tcp.recvspace: 65536 
################################### 
最大的接受TCP緩衝區空間,系統從這裏將數據分發給不同的套接字,增大該空間可提高系統瞬間接受數據的能力以提高性能。 
################################### 
這二個選項分別控制了網絡 TCP 聯機所使用的傳送及接收暫存區的大小。預設的傳送暫存區爲 32K,而接收暫存區爲 64K。 
如果需要加速 TCP 的傳輸,可以將這二個值調大一點,但缺點是太大的值會造成系統核心佔用太多的內存。 
如果我們的機器會同時服務數百或數千個網絡聯機,那麼這二個選項最好維持默認值,否則會造成系統核心內存不足。 
但如果我們使用的是 gigabite 的網絡,將這二個值調大會有明顯效能的提升。 
傳送及接收的暫存區大小可以分開調整, 
例如,假設我們的系統主要做爲網頁服務器,我們可以將接收的暫存區調小一點,並將傳送的暫存區調大,如此一來,我們就可以避免佔去太多的核心內存空間。 

net.inet.udp.maxdgram: 9216 
######################### 
最大的發送UDP數據緩衝區大小,網上的資料大多都是65536,我個人認爲沒多大必要, 
如果要調整,可以試試24576。 
############################## 
net.inet.udp.recvspace: 42080 
################## 
最大的接受UDP緩衝區大小,網上的資料大多都是65536,我個人認爲沒多大必要, 
如果要調整,可以試試49152。 
####################### 
以上四項配置通常不會導致問題,一般說來網絡流量是不對稱的,因此應該根據實際情況調整,並觀察其效果。 
如果我們將傳送或接收的暫存區設爲大於 65535,除非服務器本身及客戶端所使用的操作系統都支持 TCP 協議的 windows scaling extension (請參考 RFC 1323 文件)。
FreeBSD默認已支持 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 選項)。 
################################################### 


net.inet.tcp.log_in_vain: 0 
################## 
記錄下任何TCP連接,這個一般情況下不應該更改。 
#################### 

net.inet.tcp.blackhole: 0 
################################## 
建議設置爲2,接收到一個已經關閉的端口發來的所有包,直接drop,如果設置爲1則是隻針對TCP包 
##################################### 

net.inet.tcp.delayed_ack: 1 
########################### 
當一臺計算機發起TCP連接請求時,系統會迴應ACK應答數據包。 
該選項設置是否延遲ACK應答數據包,把它和包含數據的數據包一起發送。 
在高速網絡和低負載的情況下會略微提高性能,但在網絡連接較差的時候, 
對方計算機得不到應答會持續發起連接請求,反而會讓網絡更加擁堵,降低性能。 
因此這個值我建議您看情況而定,如果您的網速不是問題,可以將封包數量減少一半 
如果網絡不是特別好,那麼就設置爲0,有請求就先回應,這樣其實浪費的網通、電信的帶寬速率而不是你的處理時間:) 
############################ 


net.inet.tcp.inflight.enable: 1 
net.inet.tcp.inflight.debug: 0 
net.inet.tcp.inflight.rttthresh: 10 
net.inet.tcp.inflight.min: 6144 
net.inet.tcp.inflight.max: 1073725440 
net.inet.tcp.inflight.stab: 20 
########################### 
限制 TCP 帶寬延遲積和 NetBSD 的 TCP/Vegas 類似。  
它可以通過將 sysctl 變量 net.inet.tcp.inflight.enable 設置成 1 來啓用。  
系統將嘗試計算每一個連接的帶寬延遲積,並將排隊的數據量限制在恰好能保持最優吞吐量的水平上。 
這一特性在您的服務器同時向使用普通調制解調器,千兆以太網,乃至更高速度的光與網絡連接 (或其他帶寬延遲積很大的連接) 的時候尤爲重要, 
特別是當您同時使用滑動窗縮放,或使用了大的發送窗口的時候。  
如果啓用了這個選項,您還應該把 net.inet.tcp.inflight.debug 設置爲 0 (禁用調試), 
對於生產環境而言, 將 net.inet.tcp.inflight.min 設置成至少 6144 會很有好處。  
然而, 需要注意的是,這個值設置過大事實上相當於禁用了連接帶寬延遲積限制功能。 
這個限制特性減少了在路由和交換包隊列的堵塞數據數量,也減少了在本地主機接口隊列阻塞的數據的數量。 
在少數的等候隊列中、交互式連接,尤其是通過慢速的調制解調器,也能用低的 往返時間操作。 
但是,注意這隻影響到數據發送 (上載/服務端)。對數據接收(下載)沒有效果。 
調整 net.inet.tcp.inflight.stab 是 不 推薦的。 
這個參數的默認值是 20,表示把 2 個最大包加入到帶寬延遲積窗口的計算中。  
額外的窗口似的算法更爲穩定,並改善對於多變網絡環境的相應能力,  
但也會導致慢速連接下的 ping 時間增長 (儘管還是會比沒有使用 inflight 算法低許多)。  
對於這些情形, 您可能會希望把這個參數減少到 15, 10, 或 5;  
並可能因此而不得不減少 net.inet.tcp.inflight.min (比如說, 3500) 來得到希望的效果。 
減少這些參數的值, 只應作爲最後不得已時的手段來使用。 
############################ 

net.inet.tcp.syncookies: 1 
######################### 
SYN cookies是一種用於通過選擇加密的初始化TCP序列號,可以對迴應的包做驗證來降低SYN'洪水'攻擊的影響的技術。 
默認即是,不需修改 
######################## 


net.inet.tcp.msl: 30000 
####################### 
這個值網上很多文章都推薦的7500, 
還可以改的更小一些(如2000或2500),這樣可以加快不正常連接的釋放過程(三次握手2秒、FIN_WAIT4秒)。 
######################### 
net.inet.tcp.always_keepalive: 1 
########################### 
幫助系統清除沒有正常斷開的TCP連接,這增加了一些網絡帶寬的使用,但是一些死掉的連接最終能被識別並清除。 
死的TCP連接是被撥號用戶存取的系統的一個特別的問題,因爲用戶經常斷開modem而不正確的關閉活動的連接。 
############################# 

net.inet.udp.checksum: 1 
######################### 
防止不正確的udp包的攻擊,默認即是,不需修改 
############################## 

net.inet.udp.log_in_vain: 0 
####################### 
記錄下任何UDP連接,這個一般情況下不應該修改。 
####################### 

net.inet.udp.blackhole: 0 
#################### 
建議設置爲1,接收到一個已經關閉的端口發來的所有UDP包直接drop 
####################### 


net.inet.raw.maxdgram: 8192 
######################### 
Maximum outgoing raw IP datagram size 
很多文章建議設置爲65536,好像沒多大必要。 
###################################### 
net.inet.raw.recvspace: 8192 
###################### 
Maximum incoming raw IP datagram size 
很多文章建議設置爲65536,好像沒多大必要。 
####################### 

net.link.ether.inet.max_age: 1200 
#################### 
調整ARP清理的時間,通過向IP路由緩衝填充僞造的ARP條目可以讓惡意用戶產生資源耗竭和性能減低攻擊。 
這項似乎大家都未做改動,我建議不動或者稍微減少,比如300(HP-UX默認的5分鐘) 
####################### 

net.inet6.ip6.redirect: 1 
############################### 
設置爲0,屏蔽ipv6重定向功能 
########################### 


net.isr.direct: 0 
#################http://www.bsdlover.cn######### 
所有MPSAFE的網絡ISR對包做立即響應,提高網卡性能,設置爲1。 
#################################### 


hw.ata.wc: 1 
##################### 
這個選項用來打開 IDE 硬盤快取。當打開時,如果有數據要寫入硬盤時,硬盤會假裝已完成寫入,並將數據快取起來。 
這種作法會加速硬盤的存取速度,但當系統異常關機時,比較容易造成數據遺失。 
不過由於關閉這個功能所帶來的速度差異實在太大,建議還是保留原本打開的狀態吧,不做修改。 
################### 


security.bsd.see_other_uids: 1 
security.bsd.see_other_gids: 1 
##################### 
不允許用戶看到其他用戶的進程,因此應該改成0, 
#######################
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章