日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

轉(zhuǎn):FreeBSD sysctl詳解和配置方案

 霞儀 2010-05-30
sysctl 是一個用來在系統(tǒng)運作中查看及調(diào)整系統(tǒng)參數(shù)的工具。有的 sysctl 參數(shù)只是用來回報目前的系統(tǒng)狀況,例如回報目前已開機時間、所使用的操作系統(tǒng)版本、核心名稱等等;而有的可以讓我們修改參數(shù)以調(diào)整系統(tǒng)運作的行為,例如網(wǎng) 絡(luò)暫存內(nèi)存的大小、最大的上線人數(shù)等等。而這些可以調(diào)整的參數(shù)中必須在一開機系統(tǒng)執(zhí)行其它程序前就設(shè)定好,有的可以在開機完后任意調(diào)整。

  首先我們可以使用下列指令來查看目前所有的 sysctl 參數(shù)及其狀況:

  # sysctl -a | more

  kern.ostype: FreeBSD

  kern.osrelease: 5.2.1-RELEASE

  kern.osrevision: 199506

  kern.version: FreeBSD 5.2.1-RELEASE #: Sun Apr 11 16:16:08 CST 2004

  alex@alexwang.com:/usr/src/sys/i386/compile/ALEX

  kern.maxvnodes: 17812

  kern.maxproc: 2020

  kern.maxfiles: 4040

  kern.argmax: 65536

  kern.securelevel: -1

  kern.hostname: alexwang.com

  kern.hostid: 0

  kern.clockrate: { hz = 100, tick = 10000, profhz = 1024, stathz = 128 }

  kern.posix1version: 200112

  kern.ngroups: 16

  kern.job_control: 1

  kern.saved_ids: 0

  kern.boottime: { sec = 1081672724, usec = 885137 } Sun Apr 11 16:38:44 2004

  kern.domainname:

  kern.osreldate: 502010

  kern.bootfile: /boot/kernel/kernel

  kern.maxfilesperproc: 3636

  kern.maxprocperuid: 1818

  kern.ipc.maxsockbuf: 262144

  kern.ipc.sockbuf_waste_factor: 8

  kern.ipc.somaxconn: 128

  kern.ipc.max_linkhdr: 16

  kern.ipc.max_protohdr: 60

  kern.ipc.max_hdr: 76

  kern.ipc.max_datalen: 132

  kern.ipc.nmbclusters: 9024

  ………略………

  我們也可以使用 sysctl 顯示單一的參數(shù)值,例如:

  # sysctl kern.ipc.maxsockbuf

  kern.ipc.maxsockbuf: 262144

  并非所有的參數(shù)都可以使用 sysctl 進(jìn)行調(diào)整,而且有的參數(shù)對于效能的影響并不大。我們僅在此說明一些影響較明顯的設(shè)定。

  9.2.1 kern.ipc.maxsockets

  這 是用來設(shè)定系統(tǒng)最大可以開啟的 socket 數(shù)目。如果您的服務(wù)器會提供大量的 FTP 服務(wù),而且??焖俚膫鬏斠恍┬n案,您也許會發(fā)現(xiàn)常傳輸?shù)揭话刖椭袛?。因?FTP 在傳輸檔案時,每一個檔案都必須開啟一個 socket 來傳輸,但關(guān)閉 socket 需要一段時間,如果傳輸速度很快,而檔案又多,則同一時間所開啟的 socket 會超過原本系統(tǒng)所許可的值,這時我們就必須把這個值調(diào)大一點。除了 FTP 外,也許有其它網(wǎng)絡(luò)程序也會有這種問題。

  然而,這個值必須在系統(tǒng)一開機就設(shè)定好,所以如果要修改這項設(shè)定,我們必須修改 /boot/loader.conf 才行。例如,我們要將它改成最多同時可以有 16424 個 socket,則必須在 /boot/loader.conf 中加入下列這一行:

  kern.ipc.maxsockets=”16424″

  9.2.2 net.inet.ip.portrange.*

  net.inet.ip.portrange.* 是用來控制 TCP 及 UDP 所使用的 port 范圍,這個范圍被分成三個部份,低范圍、預(yù)設(shè)范圍、及高范圍。讓我們看一下目前各范圍 port 的情形:

  # sysctl -a|grep portrange

  net.inet.ip.portrange.lowfirst: 1023

  net.inet.ip.portrange.lowlast: 600

  net.inet.ip.portrange.first: 1024

  net.inet.ip.portrange.last: 5000

  net.inet.ip.portrange.hifirst: 49152

  net.inet.ip.portrange.hilast: 65535

  一 般的網(wǎng)絡(luò)程序都會用到預(yù)設(shè)范圍的 port,然而,這個預(yù)設(shè)范圍只從 1024 到 5000,這對于一臺忙碌的 FTP server 或 proxy server 可能會有不足的情形。所以我們可以手動調(diào)整一下 net.inet.ip.portrange.last 這個值,將它調(diào)為 10000、20000、甚至 40000 都是合理的。如果要在一開機就調(diào)整這個值,我們可以修改 /etc/sysctl.conf,并增加下列這一行:

  net.inet.ip.portrange.last=40000

  9.2.3 kern.ipc.shm_use_phys

  kern.ipc.shm_use_phys 這個選項預(yù)設(shè)為 0 (關(guān)閉),我們可以將它設(shè)為 1 (打開)。如果我們將它設(shè)成 1,則所有 System V 共享內(nèi)存 (share memory,一種程序間溝通的方式)部份都會被留在實體的內(nèi)存 (physical memory) 中,而不會被放到硬盤上的 swap 空間。我們知道物理內(nèi)存的存取速度比硬盤快許多,而當(dāng)物理內(nèi)存空間不足時,部份數(shù)據(jù)會被放到虛擬的內(nèi)存上,從物理內(nèi)存和虛擬內(nèi)存之間移轉(zhuǎn)的動作就叫作 swap。如果時常做 swap 的動作,則需要一直對硬盤作 I/O,速度會很慢。因此,如果我們有大量的程序 (數(shù)百個) 需要共同分享一個小的共享內(nèi)存空間,或者是共享內(nèi)存空間很大時,我們可以將這個值打開。

  這個值可以在開機完成后才設(shè)定,因此只要放在 /etc/sysctl.conf 中即可:

  kern.ipc.shm_use_phys=1

  9.2.4 vfs.vmiodirenable

  這 個選項預(yù)設(shè)被設(shè)為 1,也就是打開的狀態(tài)。它被用來決定一個目錄中的結(jié)構(gòu) (目錄下的其它文件名稱等等) 被快取在內(nèi)存中的行為。一般的目錄結(jié)構(gòu)可能都不大,而這些目錄結(jié)構(gòu)會被快取在物理內(nèi)存中。物理內(nèi)存中所存放的目錄結(jié)構(gòu)快取有限,所以不管我們的物理內(nèi)存有 多大,預(yù)設(shè)都只會快取一定大小的目錄結(jié)構(gòu)。如果我們將這個選項打開,系統(tǒng)將 buffer cache 放在虛擬內(nèi)存的快取中,目錄結(jié)構(gòu)也就會被存放在虛擬內(nèi)存中。這樣的好處是所有的內(nèi)存空間都可以被拿來做目錄的快取,而缺點是最小用來存放目錄結(jié)構(gòu)的快取會從 512 bytes 變成 4K。

  如果您的系統(tǒng)物理內(nèi)存空間有限,建議您將這個選項關(guān)閉。但如果您的系統(tǒng)需要進(jìn)行大量檔案操作,例如 proxy、多人使用的郵件服務(wù)器、或是 news server 等,建議將這個選項打開。 9.2.5 vfs.write_behind 這 個選項預(yù)設(shè)為 1,也就是打開的狀態(tài)。在打開時,在系統(tǒng)需要寫入數(shù)據(jù)在硬盤或其它儲存設(shè)備上時,它會等到收集了一個 cluster 單位的數(shù)據(jù)后再一次寫入,否則會在一個暫存區(qū)空間有寫入需求時就立即寫到硬盤上。這個選項打開時,對于一個大檔案寫入速度非常有幫助。但如果您遇到有很多 行程延滯在等待寫入動作時,您可能必須關(guān)閉這個功能。

  9.2.6 vfs.hirunningspace

  這個值決定了系統(tǒng)可以將多少數(shù)據(jù)放在寫入儲存設(shè)備的等候區(qū)。通常使用默認(rèn)值即可,但當(dāng)我們有多顆硬盤時,我們可以將它調(diào)大為 4MB 或 5MB。但必須注意的是,太大的值反而會造成效能低落。

  9.2.7 net.inet.tcp.sendspace 及 net.inet.tcp.recvspace

  這 二個選項分別控制了網(wǎng)絡(luò) TCP 聯(lián)機所使用的傳送及接收暫存區(qū)的大小。預(yù)設(shè)的傳送暫存區(qū)為 32K,而接收暫存區(qū)為 64K。如果需要加速 TCP 的傳輸,可以將這二個值調(diào)大一點,但缺點是太大的值會造成系統(tǒng)核心占用太多的內(nèi)存。如果我們的機器會同時服務(wù)數(shù)百或數(shù)千個網(wǎng)絡(luò)聯(lián)機,那么這二個選項最好維 持默認(rèn)值,否則會造成系統(tǒng)核心內(nèi)存不足。但如果我們使用的是 gigabite 的網(wǎng)絡(luò),將這二個值調(diào)大會有明顯效能的提升。傳送及接收的暫存區(qū)大小可以分開調(diào)整,例如,假設(shè)我們的系統(tǒng)主要做為網(wǎng)頁服務(wù)器,我們可以將接收的暫存區(qū)調(diào)小 一點,并將傳送的暫存區(qū)調(diào)大,如此一來,我們就可以避免占去太多的核心內(nèi)存空間。

  還有要注意的是,除了這二個選項可以控制網(wǎng)絡(luò)傳輸暫存區(qū)大小外,route 這個指令也可以用來依路由路徑的不同指定暫存區(qū)大小。另外 ipfw 等防火墻軟件也可以用來限制每個聯(lián)機所能使用的網(wǎng)絡(luò)頻寬。

  如 果我們將傳送或接收的暫存區(qū)設(shè)為大于 65535,除非我們的服務(wù)器本身及客戶端所使用的操作系統(tǒng)支持 TCP 協(xié)議的 windows scaling extension (請參考 RFC 1323 文件)。FreeBSD 預(yù)設(shè)已支援 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 選項)。

  9.2.8 net.inet.tcp.always_keepalive

  當(dāng) 這個選項打開時,系統(tǒng)會定期送出「keepalives」以檢查一個 TCP 聯(lián)機是否中斷。在打開的狀況下,所有運作的網(wǎng)絡(luò)程序都會有定時檢查聯(lián)機是否中斷的功能,否則只有當(dāng)應(yīng)用程序本身支持時才有此功能。這個選項打開的好處是讓 系統(tǒng)更便于管理網(wǎng)絡(luò)聯(lián)機,尤其是當(dāng)我們系統(tǒng)中常有一些莫名其妙就中斷聯(lián)機的使用者時。例如,當(dāng)一個使用者利用撥接連到系統(tǒng)時,很可能在完成一個完整的 TCP 聯(lián)機之前,就因為撥接中斷而造成聯(lián)機異常中斷。當(dāng)然,在某些情況下,也有可能會造成系統(tǒng)誤判網(wǎng)絡(luò)聯(lián)機已中斷而結(jié)束這個 TCP 聯(lián)機。

  9.2.9 net.inet.tcp.delayed_ack

  TCP 協(xié)議有一個特性,就是當(dāng)收到客戶端的數(shù)據(jù)時,會傳回一個 ACK (acknowledgement) 的封包,以確認(rèn)已收到數(shù)據(jù)。然而,我們也可以將 ACK 封包和所要回傳的資料一起送出。例如,當(dāng)我使用 telnet 進(jìn)入系統(tǒng)時,在輸入指定時,當(dāng)我們在鍵盤上敲打一個字符,系統(tǒng)會送回一個表示已接收到該字符的 ACK 封包,并傳回一個含有該字符的封包以在終端機上顯示。當(dāng) net.inet.tcp.delayed_ack 打開時,系統(tǒng)會將 ACK 和顯示該字符的封包一傳送,而不需分成二個封包。所以這個選項打開時,可以將封包數(shù)量減少一半,以加速網(wǎng)絡(luò)傳輸。其它的網(wǎng)絡(luò)服務(wù),例如,WWW、 SMTP、POP3 等也都具有這種特性。

  9.2.10 kern.ipc.somaxconn

  這 個選項控制了 TCP 聯(lián)機等候區(qū)最多可以等待的聯(lián)機數(shù)量,其默認(rèn)值為 128,不過這個值對于一臺忙碌的服務(wù)器而言可能小了點。例如大型的網(wǎng)頁服務(wù)器、郵件服務(wù)器,我們可以將它設(shè)為 1024。要注意的是在一些網(wǎng)絡(luò)服務(wù)的程序中,如 Apache 及 sendmail 也有自己的等待數(shù)量設(shè)定,我們可能也要在那些軟件上做一些設(shè)定才會讓 kern.ipc.somaxconn 發(fā)生作用。將這個選項的值調(diào)大一點還有一個好處,就是在面對 Denial of service 的攻擊時,有較好的防衛(wèi)能力。

  9.2.11 kern.maxfiles

  這個選項控制了系統(tǒng)中支持最多開啟的檔案數(shù)量,這個值通常是幾千個檔,但對于一臺忙碌的數(shù)據(jù)庫系統(tǒng)或是會開啟許多檔案的服務(wù)器而言,我們可以將它調(diào)高為一、二萬。

  9.2.12 kern.maxusers

  這 是用來控制系統(tǒng)內(nèi)部表格(internal system tables)大小的參數(shù),它的值大約是您期望系統(tǒng)同一時間會上線使用的使用者數(shù)量。我們在核心設(shè)定檔中有一個 maxusers 的選項,如果您使用的是 FreeBSD 4.5 以上的版本,建議您只要在核心設(shè)定檔中將它 0 即可,系統(tǒng)會在一開機時自動依您的內(nèi)存大小調(diào)整這個值。如果我們使用的是 FreeBSD 4.5 以后的版本,要調(diào)整這個值時,我們可以在 /boot/loader.conf 中加入該選項的設(shè)定,例如:

  kern.maxusers=256

  如果您使用 FreeBSD 4.4 以前的版本,則只能重新編譯核心以改變這項設(shè)定。

  這 個值一定要設(shè)定大于四,maxusers 的值決定了處理程序所容許的最大值,20+16*maxusers 就是你將得到的所容許處理程序。系統(tǒng)一開機就必須要有 18 個處理程序 (process),即便是簡單的執(zhí)行指令 man 又會產(chǎn)生 9 個 process,所以將這個值設(shè)為 64 應(yīng)該是一個合理的數(shù)目。如果你的系統(tǒng)會出現(xiàn) proc table full 的訊息的話,可以就把它設(shè)大一點,例如 128。除非您的系統(tǒng)會需要同時開啟很多檔案,否則請不要設(shè)定超過 256。

  9.2.13 kern.ipc.nmbclusters

  這 個值用來調(diào)整系統(tǒng)在開機后所要分配給網(wǎng)絡(luò) mbufs 的 cluster 數(shù)量,由于每個 cluster 大小為 2K,所以當(dāng)這個值為 1024 時,也是會用到 2MB 的核心內(nèi)存空間。我們可以簡單的估計出大約需要的大小,例如,假設(shè)我們的網(wǎng)頁同時約有 1000 個聯(lián)機,而 TCP 傳送及接收的暫存區(qū)大小都是 16K,則最糟的情況下,我們會需要 (16K+16K) * 1024,也就是 32MB 的空間,然而所需的 mbufs 大概是這個空間的二倍,也就是 64MB,所以所需的 cluster 數(shù)量為 64MB/2K,也就是 32768。對于內(nèi)存有限的機器,建議值是 1024 到 4096 之間,而當(dāng)擁有海量存儲器空間時,我們可以將它設(shè)定為 4096 到 32768 之間。我們可以使用 netstat 這個指令并加上參數(shù) -m 來查看目前所使用的 mbufs 數(shù)量。

  當(dāng)我們要修改這個值是,必須在一開機就修改,所以只能在 /boot/loader.conf 中加入修改的設(shè)定,例如:

  kern.ipc.nmbclusters=16384

  這個是我在實際使用服務(wù)器中的參數(shù),請在:/etc/sysctl.conf 加入?yún)?shù)

  kern.ipc.somaxconn=8192

  kern.ipc.maxsockbuf=2097152

  kern.maxfilesperproc=32768

  kern.maxfiles=65536

  #kern.securelevel=0

  net.inet.tcp.sendspace=65536

  net.inet.tcp.recvspace=32768

  net.inet.udp.maxdgram=57344

  net.inet.icmp.drop_redirect=1

  net.inet.icmp.log_redirect=0

  net.inet.ip.redirect=0

  net.inet6.ip6.redirect=0

  net.inet.icmp.icmplim=100

  net.inet.tcp.always_keepalive=0

  net.inet.tcp.delayed_ack=0

  net.inet.tcp.log_in_vain=0

  net.inet.udp.log_in_vain=0

  net.inet.tcp.blackhole=2

  net.inet.udp.blackhole=1

  net.local.stream.sendspace=65535

  net.local.stream.recvspace=32768

  net.inet.ip.fastforwarding=1查看 # sysctl -a |grep syncookies 是否打開,開著可以防小規(guī)模的DDOS

  如:# sysctl net.inet.tcp.syncookies=1

  # ee /boot/loader.conf

  kern.maxdsiz="536870912"

  kern.ipc.maxsockets="4008"

  kern.ipc.nmbclusters="32768"

  kern.ipc.nmbufs="65535"

  kern.ipc.nsfbufs="2496"

  net.inet.tcp.tcbhashsize="2048"

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多