希望對您有幫助,並更了解OSX這個OS!(文字較多包涵)
sysctl 是一個系統運作中查看及調整系統參數的工具。有的 sysctl 參數只是用來回報目前的系統狀況,例如回目前已開機時間、所使用的作業系統版本、核心名稱等等;而有的可以讓我們修改參數以調整系統運作的行為,例如網路暫存記憶體的大小、最大的上線人數等等。而這些可以調整的參數中必須在一開機系統執行其他程式前就設定好,有的可以在開機完後任意調整。
OSX在開機時期會執行一個/etc/rc 的檔案,其中有一行:
if [ -f /etc/sysctl.conf ]; then
awk '{ if (!index($1, "#") && index($1, "=")) print $1 }' < /etc/sysctl.conf | while read
當/etc/sysctl.conf 這個檔案存在的話會讀入 sysctl.conf 內容!
首先我們可以使用下列指令來查看目前所有的 sysctl 參數及其狀況:
$ sysctl -a | more

檢視個別 sysctl 參數:
$ sysctl net.inet.tcp.delayed_ack
或是與 buf 相關的所有參數:
$ sysctl -a | grep buf

那修改參數的方式有兩種:
1.在/etc 目錄下增加 sysctl.conf 檔案,將需要修改的參數加入,當反悔時將sysctl.conf移除即可,(或在參數前加上#號),並不會對系統造成傷害!如我的sysctl.conf:

2. 終端機模式,使用sudo -s , 直接修改系統值(不建議這樣,除非你非常熟悉OSX),如:
#sysctl -w net.inet.tcp.delayed_ack=0
將一些有用的參數整理如下:
(1).net.inet.tcp.delayed_ack
TCP 協定有一個特性,就是當收到客戶端的資料時,會傳回一個 ACK (acknowledgement) 的封包,以確認已收到資料。其他的網路服務,例如,WWW、SMTP、POP3 等也都具有這種特性。在高速網路和低負載的情況下會稍微提高效能;但在網路連接較差的情況下對方電腦得不到應答反而會降低效能。
net.inet.tcp.delayed_ack=0
default=
net.inet.tcp.delayed_ack:3
(2).kern.ipc.maxsockbuf
這是用來設定系統最大可以開啟的 socket 數目。如果您的伺服器會提供大量的 FTP 服務,而且常快速的傳輸一些小檔案,您也許會發現常傳輸到一半就中斷。因為 FTP 在傳輸檔案時,每一個檔案都必須開啟一個 socket 來傳輸,但關閉 socket 需要一段時間,如果傳輸速度很快,而檔案又多,則同一時間所開啟的 socket 會超過原本系統所許可的值,這時我們就必須把這個值調大一點。除了 FTP 外,也許有其他網路程式也會有這種問題。
kern.ipc.maxsockbuf=8000000
default=
kern.ipc.maxsockbuf:262144
(3).net.inet.tcp.sendspace 及 net.inet.tcp.recvspace
這二個選項分別控制了網路 TCP 連線所使用的傳送及接收暫存區的大小。預設的傳送暫存區為 32K,而接收暫存區為 64K。如果需要加速 TCP 的傳輸,可以將這二個值調大一點,但缺點是太大的值會造成系統核心佔用太多的記憶體。如果我們的機器會同時服務數百或數千個網路連線,那麼這二個選項最好維持預設值,否則會造成系統核心記憶體不足。但如果我們使用的是 gigabite 的網路,將這二個值調大會有明顯效能的提升。傳送及接收的暫存區大小可以分開調整,例如,假設我們的系統主要做為網頁伺服器,我們可以將接收的暫存區調小一點,並將傳送的暫存區調大,如此一來,我們就可以避免佔去太多的核心記憶體空間。
default=
net.inet.tcp.recvspace: 32768
net.inet.tcp.sendspace: 32768
參考:
http://www.apple.com/support/downloads/broadbandtuner10.html
和上面的 kern.ipc.maxsockbuf 搭配,可以增加網路傳輸的速度:
kern.ipc.maxsockbuf=8000000
net.inet.tcp.sendspace=65536
net.inet.tcp.recvspace=65536
(4).kern.maxproc 及 kern.maxprocperuid
在跑 bittorrent 碰到 'Too many open files' 這個訊息,就將修改為:
允許系統執行最多的行程(processes)
kern.maxproc=2048
允許使用者執行最多的行程(processes)
kern.maxprocperuid=500
default=
kern.maxproc = 532
kern.maxprocperuid = 100
參考:FreeBSD 6.0架設管理與應用
下一篇:sysctl調校 (之二)