1. 程式人生 > >Linux核心調優之Sysctl研究

Linux核心調優之Sysctl研究

    sysctl 是一個用來在系統運作中檢視及調整系統引數的工具,它包含一些 TCP/IP 堆疊和虛擬記憶體系統的高階選項, 這可以讓有經驗的管理員提高引人注目的系統 效能。用sysctl可以讀取設定超過五百個系統變數。基於這點,sysctl(8) 提供兩個功能:讀取和修改系統設定。有的 sysctl 引數只是用來回報目前的系統狀況,例如回報目前已開機時間、所使用的作業系統版本、核心名稱等等;而有的可以讓我們修改引數以調整系統運作的行為,例如網 絡暫存記憶體的大小、最大的上線人數等等。而這些可以調整的引數中必須在一開機系統執行其它程式前就設定好,有的可以在開機完後任意調整。
檢視所有可讀變數:
# 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
 
下面是對/etc/sysctl.conf配置檔案的一些中文註釋。在對伺服器效能進行調整的時候可能會用得上!
#最大的待發送TCP資料緩衝區空間 
net.inet.tcp.sendspace=65536 

#最大的接受TCP緩衝區空間 
net.inet.tcp.recvspace=65536 

#最大的接受UDP緩衝區大小 
net.inet.udp.sendspace=65535 

#最大的傳送UDP資料緩衝區大小 
net.inet.udp.maxdgram=65535 

#本地套接字連線的資料傳送空間 
net.local.stream.sendspace=65535 

#加快網路效能的協議 
net.inet.tcp.rfc1323=1 
net.inet.tcp.rfc1644=1 
net.inet.tcp.rfc3042=1 
net.inet.tcp.rfc3390=1 

#最大的套接字緩衝區 
kern.ipc.maxsockbuf=2097152 

#系統中允許的最多檔案數量 
kern.maxfiles=65536 

#每個程序能夠同時開啟的最大檔案數量 
kern.maxfilesperproc=32768 

#當一臺計算機發起TCP連線請求時,系統會迴應ACK應答資料包。該選項設定是否延遲ACK應答資料包,把它和包含資料的資料包一起傳送,在高速網路和低負載的情況下會略微提高效能,但在網路連線較差的時候,對方計算機得不到應答會持續發起連線請求,反而會降低效能。 
net.inet.tcp.delayed_ack=0 

#遮蔽ICMP重定向功能 
net.inet.icmp.drop_redirect=1 
net.inet.icmp.log_redirect=1 
net.inet.ip.redirect=0 
net.inet6.ip6.redirect=0 

#防止ICMP廣播風暴 
net.inet.icmp.bmcastecho=0 
net.inet.icmp.maskrepl=0 

#限制系統傳送ICMP速率 
net.inet.icmp.icmplim=100 

#安全引數,編譯核心的時候加了options TCP_DROP_SYNFIN才可以用 
net.inet.icmp.icmplim_output=0 
net.inet.tcp.drop_synfin=1 

#設定為1會幫助系統清除沒有正常斷開的TCP連線,這增加了一些網路頻寬的使用,但是一些死掉的連線最終能被識別並清除。死的TCP連線是被撥號使用者存取的系統的一個特別的問題,因為使用者經常斷開modem而不正確的關閉活動的連線 
net.inet.tcp.always_keepalive=1 

#若看到net.inet.ip.intr_queue_drops這個在增加,就要調大net.inet.ip.intr_queue_maxlen,為0最好 
net.inet.ip.intr_queue_maxlen=1000 

#防止DOS攻擊,預設為30000 
net.inet.tcp.msl=7500 

#接收到一個已經關閉的埠發來的所有包,直接drop,如果設定為1則是隻針對TCP包 
net.inet.tcp.blackhole=2 

#接收到一個已經關閉的埠發來的所有UDP包直接drop 
net.inet.udp.blackhole=1 

#為網路資料連線時提供緩衝 
net.inet.tcp.inflight.enable=1 

#如果開啟的話每個目標地址一次轉發成功以後它的資料都將被記錄進路由表和arp資料表,節約路由的計算時間,但會需要大量的核心記憶體空間來儲存路由表 
net.inet.ip.fastforwarding=0 

#kernel編譯開啟options POLLING功能,高負載情況下使用低負載不推薦SMP不能和polling一起用 
#kern.polling.enable=1 

#併發連線數,預設為128,推薦在1024-4096之間,數字越大佔用記憶體也越大 
kern.ipc.somaxconn=32768 

#禁止使用者檢視其他使用者的程序 
security.bsd.see_other_uids=0 

#設定kernel安全級別 
kern.securelevel=0 

#記錄下任何TCP連線 
net.inet.tcp.log_in_vain=1 

#記錄下任何UDP連線 
net.inet.udp.log_in_vain=1 

#防止不正確的udp包的攻擊 
net.inet.udp.checksum=1 

#防止DOS攻擊 
net.inet.tcp.syncookies=1 

#僅為執行緒提供實體記憶體支援,需要256兆以上記憶體 
kern.ipc.shm_use_phys=1 

# 執行緒可使用的最大共享記憶體 
kern.ipc.shmmax=67108864 

# 最大執行緒數量 
kern.ipc.shmall=32768 

# 程式崩潰時不記錄 
kern.coredump=0 

# lo本地資料流接收和傳送空間 
net.local.stream.recvspace=65536 
net.local.dgram.maxdgram=16384 
net.local.dgram.recvspace=65536 

# 資料包資料段大小,ADSL為1452。 
net.inet.tcp.mssdflt=1460 

# 為網路資料連線時提供緩衝 
net.inet.tcp.inflight_enable=1 

# 資料包資料段最小值,ADSL為1452 
net.inet.tcp.minmss=1460 

# 本地資料最大數量 
net.inet.raw.maxdgram=65536 

# 本地資料流接收空間 
net.inet.raw.recvspace=65536 

#ipfw防火牆動態規則數量,預設為4096,增大該值可以防止某些病毒傳送大量TCP連線,導致不能建立正常連線 
net.inet.ip.fw.dyn_max=65535 

#設定ipf防火牆TCP連線空閒保留時間,預設8640000(120小時) 
net.inet.ipf.fr_tcpidletimeout=864000