/etc/sysctl.conf部分引數說明
我們也可以使用 sysctl 顯示單一的引數值,例如:
# sysctl kern.ipc.maxsockbuf
kern.ipc.maxsockbuf: 262144
並非所有的引數都可以使用 sysctl 進行調整,而且有的引數對於效能的影響並不大。我們僅在此說明一些影響較明顯的設定。
9.2.1 kern.ipc.maxsockets
這是用來設定系統最大可以開啟的 socket 數目。如果您的伺服器會提供大量的 FTP 服務,而且常快速的傳輸一些小檔案,您也許會發現常傳輸到一半就中斷。因為 FTP 在傳輸檔案時,每一個檔案都必須開啟一個 socket 來傳輸,但關閉 socket 需要一段時間,如果傳輸速度很快,而檔案又多,則同一時間所開啟的 socket 會超過原本系統所許可的值,這時我們就必須把這個值調大一點。除了 FTP 外,也許有其它網路程式也會有這種問題。
然而,這個值必須在系統一開機就設定好,所以如果要修改這項設定,我們必須修改 /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 範圍,這個範圍被分成三個部份,低範圍、預設範圍、及高範圍。讓我們看一下目前各範圍 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
一般的網路程式都會用到預設範圍的 port,然而,這個預設範圍只從 1024 到 5000,這對於一臺忙碌的 FTP server 或 proxy server 可能會有不足的情形。所以我們可以手動調整一下 net.inet.ip.portrange.last 這個值,將它調為 10000、20000、甚至 40000 都是合理的。如果要在一開機就調整這個值,我們可以修改 /etc/sysctl.conf,並增加下列這一行:
net.inet.ip.portrange.last=40000
9.2.3 kern.ipc.shm_use_phys
kern.ipc.shm_use_phys 這個選項預設為 0 (關閉),我們可以將它設為 1 (開啟)。如果我們將它設成 1,則所有 System V 共享記憶體 (share memory,一種程式間溝通的方式)部份都會被留在實體的記憶體 (physical memory) 中,而不會被放到硬碟上的 swap 空間。我們知道實體記憶體的存取速度比硬碟快許多,而當實體記憶體空間不足時,部份資料會被放到虛擬的記憶體上,從實體記憶體和虛擬記憶體之間移轉的動作就叫作 swap。如果時常做 swap 的動作,則需要一直對硬碟作 I/O,速度會很慢。因此,如果我們有大量的程式 (數百個) 需要共同分享一個小的共享記憶體空間,或者是共享記憶體空間很大時,我們可以將這個值開啟。
這個值可以在開機完成後才設定,因此只要放在 /etc/sysctl.conf 中即可:
kern.ipc.shm_use_phys=1
9.2.4 vfs.vmiodirenable
這個選項預設被設為 1,也就是開啟的狀態。它被用來決定一個目錄中的結構 (目錄下的其它檔名稱等等) 被快取在記憶體中的行為。一般的目錄結構可能都不大,而這些目錄結構會被快取在實體記憶體中。實體記憶體中所存放的目錄結構快取有限,所以不管我們的實體記憶體有 多大,預設都只會快取一定大小的目錄結構。如果我們將這個選項開啟,系統將 buffer cache 放在虛擬記憶體的快取中,目錄結構也就會被存放在虛擬記憶體中。這樣的好處是所有的記憶體空間都可以被拿來做目錄的快取,而缺點是最小用來存放目錄結構的快取會 從 512 bytes 變成 4K。
如果您的系統實體記憶體空間有限,建議您將這個選項關閉。但如果您的系統需要進行大量檔案操作,例如 proxy、多人使用的郵件伺服器、或是 news server 等,建議將這個選項開啟。
9.2.5 vfs.write_behind
這個選項預設為 1,也就是開啟的狀態。在開啟時,在系統需要寫入資料在硬碟或其它儲存裝置上時,它會等到收集了一個 cluster 單位的資料後再一次寫入,否則會在一個暫存區空間有寫入需求時就立即寫到硬碟上。這個選項開啟時,對於一個大檔案寫入速度非常有幫助。但如果您遇到有很多 行程延滯在等待寫入動作時,您可能必須關閉這個功能。
9.2.6 vfs.hirunningspace
這個值決定了系統可以將多少資料放在寫入儲存裝置的等候區。通常使用預設值即可,但當我們有多顆硬碟時,我們可以將它調大為 4MB 或 5MB。但必須注意的是,太大的值反而會造成效能低落。
9.2.7 net.inet.tcp.sendspace 及 net.inet.tcp.recvspace
這二個選項分別控制了網路 TCP 聯機所使用的傳送及接收暫存區的大小。預設的傳送暫存區為 32K,而接收暫存區為 64K。如果需要加速 TCP 的傳輸,可以將這二個值調大一點,但缺點是太大的值會造成系統核心佔用太多的記憶體。如果我們的機器會同時服務數百或數千個網路聯機,那麼這二個選項最好維 持預設值,否則會造成系統核心記憶體不足。但如果我們使用的是 gigabite 的網路,將這二個值調大會有明顯效能的提升。傳送及接收的暫存區大小可以分開調整,例如,假設我們的系統主要做為網頁伺服器,我們可以將接收的暫存區調小 一點,並將傳送的暫存區調大,如此一來,我們就可以避免佔去太多的核心記憶體空間。
還有要注意的是,除了這二個選項可以控制網路傳輸暫存區大小外,route 這個指令也可以用來依路由路徑的不同指定暫存區大小。另外 ipfw 等防火牆軟體也可以用來限制每個聯機所能使用的網路頻寬。
如果我們將傳送或接收的暫存區設為大於 65535,除非我們的伺服器本身及客戶端所使用的作業系統支援 TCP 協議的 windows scaling extension (請參考 RFC 1323 檔案)。FreeBSD 預設已支援 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 選項)。
9.2.8 net.inet.tcp.always_keepalive
當這個選項開啟時,系統會定期送出「keepalives」以檢查一個 TCP 聯機是否中斷。在開啟的狀況下,所有運作的網路程式都會有定時檢查聯機是否中斷的功能,否則只有當應用程式本身支援時才有此功能。這個選項開啟的好處是讓 系統更便於管理網路聯機,尤其是當我們系統中常有一些莫名其妙就中斷聯機的使用者時。例如,當一個使用者利用撥接連到系統時,很可能在完成一個完整的 TCP 聯機之前,就因為撥接中斷而造成聯機異常中斷。當然,在某些情況下,也有可能會造成系統誤判網路聯機已中斷而結束這個 TCP 聯機。
9.2.9 net.inet.tcp.delayed_ack
TCP 協議有一個特性,就是當收到客戶端的資料時,會傳回一個 ACK (acknowledgement) 的封包,以確認已收到資料。然而,我們也可以將 ACK 封包和所要回傳的資料一起送出。例如,當我使用 telnet 進入系統時,在輸入指定時,當我們在鍵盤上敲打一個字元,系統會送回一個表示已接收到該字元的 ACK 封包,並傳回一個含有該字元的封包以在終端機上顯示。當 net.inet.tcp.delayed_ack 開啟時,系統會將 ACK 和顯示該字元的封包一傳送,而不需分成二個封包。所以這個選項開啟時,可以將封包數量減少一半,以加速網路傳輸。其它的網路服務,例如,WWW、 SMTP、POP3 等也都具有這種特性。
bestwc at 2008-3-12 21:45:45
9.2.10 kern.ipc.somaxconn
這個選項控制了 TCP 聯機等候區最多可以等待的聯機數量,其預設值為 128,不過這個值對於一臺忙碌的伺服器而言可能小了點。例如大型的網頁伺服器、郵件伺服器,我們可以將它設為 1024。要注意的是在一些網路服務的程式中,如 Apache 及 sendmail 也有自己的等待數量設定,我們可能也要在那些軟體上做一些設定才會讓 kern.ipc.somaxconn 發生作用。將這個選項的值調大一點還有一個好處,就是在面對 Denial of service 的攻擊時,有較好的防衛能力。
9.2.11 kern.maxfiles
這個選項控制了系統中支援最多開啟的檔案數量,這個值通常是幾千個檔,但對於一臺忙碌的資料庫系統或是會開啟許多檔案的伺服器而言,我們可以將它調高為一、二萬。
9.2.12 kern.maxusers
這是用來控制系統內部表格(internal system tables)大小的引數,它的值大約是您期望系統同一時間會上線使用的使用者數量。我們在核心設定檔中有一個 maxusers 的選項,如果您使用的是 FreeBSD 4.5 以上的版本,建議您只要在核心設定檔中將它 0 即可,系統會在一開機時自動依您的記憶體大小調整這個值。如果我們使用的是 FreeBSD
4.5 以後的版本,要調整這個值時,我們可以在 /boot/loader.conf 中加入該選項的設定,例如:
kern.maxusers=256
如果您使用 FreeBSD 4.4 以前的版本,則只能重新編譯核心以改變這項設定。
這個值一定要設定大於四,maxusers 的值決定了處理程式所容許的最大值,20+16*maxusers 就是你將得到的所容許處理程式。系統一開機就必須要有 18 個處理程式 (process),即便是簡單的執行指令 man 又會產生 9 個 process,所以將這個值設為 64 應該是一個合理的數目。如果你的系統會出現 proc table full 的訊息的話,可以就把它設大一點,例如 128。除非您的系統會需要同時開啟很多檔案,否則請不要設定超過 256。
9.2.13 kern.ipc.nmbclusters
這個值用來調整系統在開機後所要分配給網路 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=16384
這個是我在實際使用伺服器中的引數,請在:/etc/sysctl.conf 加入引數
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 是否開啟,開著可以防小規模的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"
bestwc at 2008-3-12 21:46:10
再來一份類似的:
net.inet.tcp.rfc1323=1
net.inet.tcp.rfc1644=1
net.inet.tcp.rfc3042=1
net.inet.tcp.rfc3390=1
#### 某些加快網路效能的協議,請參考RFC文章。
net.inet.ip.forwarding=1
##作路由必須開啟
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
##安全方面的引數
kern.ipc.maxsockbuf=8388608
##最大的套接字緩衝區
kern.ipc.somaxconn=8192
##最大的等待連線完成的套接字佇列大小,高負載伺服器和受到分散式服務阻塞攻擊的系統也許
會因為這個佇列被塞滿而不能提供正常服務。預設僅為128,根據機器和實際情況需要改動,太大就浪費了記憶體
kern.maxfiles=65536
##系統中允許的最多檔案數量,預設的是幾千個但如果你在執行資料庫或大的很吃描述符的程式可以把它設到1萬或2萬個
kern.maxfilesperproc=32768
##每個程式能夠同時開啟的最大檔案數量
net.inet.tcp.delayed_ack=0
##當一臺計算機發起TCP連線請求時,系統會迴應ACK應答資料包。該選項設定是否延遲ACK應答資料包,把它和包含資料的資料包一起傳送,在高速網路 和低負載的情況下會略微提高效能,但在網路連線較差的時候,對方計算機得不到應答會持續發起連線請求,反而會降低效能。
net.inet.tcp.sendspace=65535
##最大的待傳送TCP資料緩衝區空間,應用程式將資料放到這裡就認為傳送成功了,系統TCP堆疊保證資料的正常傳送
net.inet.tcp.recvspace=65535
##最大的接受TCP緩衝區空間,系統從這裡將資料分發給不同的套接字,增大該空間可提高系統瞬間接受資料的能力以提高效能。
net.inet.udp.recvspace=65535
##最大的接受UDP緩衝區大小
net.inet.udp.maxdgram=57344
##最大的傳送UDP資料緩衝區大小
net.local.stream.recvspace=32768
##本地套接字連線的資料接收空間
net.local.stream.sendspace=65535
##本地套接字連線的資料傳送空間
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
##防止廣播風暴
net.inet.icmp.icmplim=100
##限制系統傳送ICMP速率
net.inet.icmp.icmplim_output=0
net.inet.tcp.drop_synfin=1
##安全引數,編譯核心的時候加了options TCP_DROP_SYNFIN才可以用
net.inet.tcp.always_keepalive=0
##設定為1會幫助系統清除沒有正常斷開的TCP連線,這增加了一些網路頻寬的使用,但是一些死掉的連線最終能被識別並清除。死的TCP連線是被撥號使用者存取的系統的一個特別的問題,因為使用者經常斷開modem而不正確的關閉活動的連線。
net.inet.ip.intr_queue_maxlen=1000
##若看到net.inet.ip.intr_queue_drops這個在增加,就要調大net.inet.ip.intr_queue_maxlen,為0最好
bestwc at 2008-3-12 21:46:40
####以下為防止dos攻擊#####
net.inet.tcp.msl=7500
##freebsd預設為30000
net.inet.tcp.blackhole=2
##接收到一個已經關閉的埠發來的所有包,直接drop,如果設定為1則是隻針對TCP包
net.inet.udp.blackhole=1
##接收到一個已經關閉的埠發來的所有UDP包直接drop
net.inet.ipf.fr_tcpidletimeout=7200
net.inet.ipf.fr_tcpclosewait=60
net.inet.ipf.fr_tcplastack=120
net.inet.ipf.fr_tcptimeout=120
net.inet.ipf.fr_tcpclosed=60
net.inet.ipf.fr_udptimeout=90
net.inet.ipf.fr_icmptimeout=35
net.inet.ipf.fr_tcphalfclosed=300
net.inet.ipf.fr_defnatage=600
net.inet.tcp.inflight.enable=1
## 為網路資料連線時提供緩衝
net.inet.ip.fastforwarding=0
##如果開啟的話每個目標地址一次轉發成功以後它的資料都將被記錄進路由表和arp資料表,節約路由的計算時間,但會需要大量的核心記憶體空間來儲存路由表。
---------------------
作者:ying0216
來源:CSDN
原文:https://blog.csdn.net/ying0216/article/details/4024143?utm_source=copy
版權宣告:本文為博主原創文章,轉載請附上博文連結!
相關文章
- /etc/sysctl.conf引數解釋
- Mysql my.cnf部分引數說明MySql
- TOP引數說明
- mysqldump引數說明MySql
- Oracle Table建立引數說明Oracle
- GoldenGate HANDLECOLLISIONS引數使用說明Go
- linux常用核心引數說明Linux
- Oracle中的sysctl.conf核心引數Oracle
- Nginx的gzip配置引數說明Nginx
- mydumper和myloader引數使用說明
- pytest(10)-常用執行引數說明
- Azure Blob (三)引數設定說明
- 所有初始化引數說明(轉)
- mysql relay log相關引數說明MySql
- MogDB 2.1.1 初始化引數概要說明
- 【cartographer_ros】七: 主要配置引數說明ROS
- 介紹tomcat Connector 引數優化說明Tomcat優化
- pt-online-schema-change使用引數說明
- JQuery Datatables Columns API 引數詳細說明jQueryAPI
- makefile中的一些引數說明
- MySQL Galera cluster叢集常用引數說明MySql
- C10-05-1-Nmap常用引數說明
- 資料泵的TRANSFORM引數說明及使用ORM
- 關於xtrabackup --slave-info引數的說明
- ABAP-BITMAP的命令引數的使用說明
- 【X$VIEW】X$部分視訊說明View
- MySQL:AHI 部分程式碼流程說明MySql
- gnupg2 2.2.20版本,命令引數說明
- 關於 navigator.mediaDevices.getUserMedia 的輸入引數說明dev
- 插曲:Kafka的生產者原理及重要引數說明Kafka
- PHP中$_SERVER的常用引數與說明——收錄篇PHPServer
- 桌上型電腦電源相關引數說明
- Devexpress部分控制元件的原理及其說明devExpress控制元件
- PbootCMS模板呼叫幻燈片輪播圖及引數說明boot
- jquery datatables各引數詳細說明及簡單應用jQuery
- Java Out Of Memory解決之JAVA_OPTS引數說明與配置Java
- PHP擴充套件資料庫連線引數說明詳解PHP套件資料庫
- kubernetes實踐之十五:Kubernetes叢集主要啟動引數說明