歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix基礎知識 >> 類UNIX 教程:FreeBSD下的系統性能調優

類UNIX 教程:FreeBSD下的系統性能調優

日期:2017/2/25 10:13:42   编辑:Unix基礎知識

當用disklabel(8)在你的硬盤上布局文件系統時,重要的是要記住硬盤在傳送數據時外磁道比內磁道快。為了利用這個特點,你應該把較小的文件系統和交換區靠近外磁道,隨後是較大的文件系統,最後是最大的文件系統。還有重要的是把標准文件系統大小確定在當你要增加這台機器負荷時也不需要重定他們的大小。我經常建立的文件系統的次序是128M的root,1G的swap,128M的 /var/tmp,3G的/usr,其余的空間留給/home。

典型地,你應該把交換區大小定為2倍的內存大小。如果你沒有很多內存,那樣的話,你將需要更多的交換區空間。不建議將交換區定在小於256M,當你確定交換區大小的時候,你要考慮到將來可能要擴充內存。內核的VM(虛擬內存)換頁算法性能是准對交換區至少是內存大小2倍的條件進行優化的。配置太小的交換區會導致VM頁面掃描的低效率,當內存擴充後,隨之也會導致問題。最後在一個有多個SCSI硬盤的大系統上(或者有多個IDE磁盤工作在多個IDE控制器上),我們強烈建議在每個驅動器上配置交換分區,每個交換分區的大小應該是幾乎一樣的,內核能處理任意大小的交換區,但是內部數據結構放大到最大分區的4 倍大小。保持交換分區同樣的大小允許內核優化地將交換空間交叉分布在N個磁盤上。不要擔心這樣做有點過份,交換區是UNIX的救星,甚至於你雖然通常不用那麼多交換區,在被迫重新啟動之前,它也可以給你時間去從一個出軌的程序中把系統恢復過來。

怎樣為你的/var分區定大小主要依賴於你將怎樣使用這台機器。這個分區主要存放郵箱,打印緩沖區和日志文件。有些人甚至於把/var/log作為一個獨立的分區(但是除非有特別的情況,這樣做不值得,只會浪費一個分區ID)。如果你這台機器主要用做郵件或打印服務器,或者運行一個大訪問量的WEB服務器,你應該考慮把這個分區建的更大一點,可能1G或更多。很容易低估日志文件的存儲需求。

確定/var/tmp的大小依賴於你將需要怎樣使用你的臨時文件。128M是建議的最小的尺寸。注意sysinstall將建立一個/tmp目錄,但是通常把/tmp作為/var/tmp 的連接是個好注意。為臨時文件建立一個分區有兩個重要的原因:首先,它減少了系統崩潰後文件系統損壞的可能性,再就是減少一個出軌程序填滿[/var]/tmp 時影響其他重要子系統(mail,logging等等)的機會。填滿[/var]/tmp是經常發生的問題。

在以前/tmp和/var/tmp是不同的東西,但是引入/var(和/var/tmp)是被程序員引起的大迷惑,今天的程序間或使用一個或另一個,它們兩者變的沒有區別。所以把它們變成一個臨時目錄是有道理的.然而,當你處理/tmp時,有一件事情是你不想做的,就是把/tmp駐留在根分區上,導致根分區被填滿或崩潰後重啟時文件系統損壞.

/usr分區存放大量用於支持系統的文件,子目錄/usr/local存放大量從ports(7) 安裝的文件.如果你不那麼多使用ports,也不將系統源代碼(/usr/src)存放在機器上,你可以為/usr節省1G的磁盤空間.相反,如果你安裝大量的ports(特別是窗口管理和Linux仿真)建議你至少2G的/usr,如果你還要將系統源代碼放在機器上,我們建議你3G的/usr,不要低估所需的空間,它會慢慢爬起來,讓你大吃一驚.

/home分區存放用戶自己的數據,我通常把余下的空間留給這個分區.為什麼要分區?為什麼不建一個大的/分區就行了?那樣我就不需要考慮分區大小問題。有幾個原因顯示這不是個好注意。首先,每個分區都有不同的操作特征,分開它們有利於文件系統准對這些特征調整它自己.例如,根和/usr分區主要是讀操作,只有少量的寫,而大量的讀和寫可以發生在/var在/var/tmp。把小的但是具有更繁忙的寫操作的分區分開,就不會影響讀操作居多的分區.再就是,把寫操作居多的分區靠近磁盤外側(例如,不是在一個大分區前,而是分區表後)有利於對你經常需要的分區增加性能。你可能也需要在大分區中的I/O性能,但是它們是那樣的大以至於把它們移到磁盤外側也不會顯著增加性能,但是把/var移到磁盤外側會有顯著的不同.

正確分區你的系統允許你調整newfs(8)和tunefs(8)的參數。調整newfs(8)需要更多的經驗,但是會帶來顯著的性能提高。有三個參數可以相對安全的調整: blocksize(塊尺寸),bytes/inode(每i節點字節數)和cylinders/group(每組柱面數).

當塊尺寸是8K或16K時,FreeBSD運行的最好.缺省的文件系統塊尺寸是8K。對於一個大的分區使用16K塊尺寸是個好注意.這同樣需要你指定碎片(Fragment)大小。我們建議碎片總是塊大小的1/8(其他的碎片尺寸測的不多)。newfs(8)選項是 newfs-f2048-b16384。。。。使用更大的塊尺寸將導致緩沖區碎塊,降低性能.如果大分區主要趨向於使用少量的大文件,例如數據庫文件。你可以增加 bytes/inode比例,它減少該分區的i節點的數量(最大可被建立的文件和目錄數量 )。減少文件系統i節點數量可以大大減少fsck(8)在系統崩潰後恢復的時間。不要使用這個選項,除非你確實在這個分區存放大文件.如果你過度這樣做,你可能會被文件系統依然有大量的空間而不能創建文件的事情所困擾。使用32768, 65536或262144bytes/inode是建議的值。你可以調的更高,但是那只影響fsck的恢復時間.例如,newfs-i32768...

IDE WRITECACHE

FreeBSD4.3不認真考慮地將IDE寫緩存關閉。這降低了到IDE磁盤的寫盤帶寬,但是考慮到硬盤廠商引入的嚴重的數據一致性問題而言是必要的。基本問題是 IDE驅動器在寫完成上說謊。當IDE寫緩沖打開時,IDE硬盤不僅不會按次序將數據寫入磁盤,而且在嚴重的磁盤負荷下有時會永遠耽擱有些數據塊。當系統崩潰或掉電時會導致嚴重的文件系統損壞。所以我們的缺省值是安全的。不幸的是結果是巨大的性能損失,我們投降了並在發行後把缺省值改了過來。你應該通過查看hw.ata.wc這個sysctl來檢查你系統上的缺省值。如果IDE寫緩沖是關閉的,你可以將通過將hw.ata.wc內核變量設置為1而將它改回來。這必須在bootloader(8)啟動時做。企圖在內核啟動後在做是沒有作用的。請參見 ata(4)和loader(8)。

還有IDE硬盤的一個試驗性的功能叫做hw.ata.tags(也能夠在bootloader中設置)允許寫緩沖被安全地打開。這是將SCSI的tagging功能帶到IDE驅動器上。寫這篇文章時只有IBM的DPTA和DTLA驅動器支持這個功能。警告!這些驅動器明顯有質量控制方面的問題,所以我建議你不要在這個時候買。如果你需要性能,選用SCSI吧。

CPU,MEMORY,DISK,NETWORK

做何種調整依賴於你的系統在負載變大時哪一部分開始成為瓶頸。如果你的系統用完了CPU(空閒時間為0%)那你需要升級CPU或轉移到SMP的主板(多CPU),或者你需要重新回顧你那個引起負荷的程序並試著優化它。如果系統正有大量的頁面交換,需要考慮增加內存。如果系統真讓磁盤滿載通常能看到高CPUidle值和滿載的磁盤。systat(1)可用於監視這個情況。對付磁盤滿載有很多種方法:增加內存用於緩沖,鏡象磁盤,把操作分到不同的機器等等。如果磁盤性能是個問題而且正在使用IDE硬盤,切換到SCSI能幫大忙。現代IDE驅動器與SCSI在低級順序帶寬上比較時,當你開始尋找,SCSI驅動器通常會贏。

最後,你可能用完了網絡帶寬。提高網絡性能的第一道防線用switch替換hub,特別是今天switch和hub一樣便宜。hub由於沖突補償在重負載下有嚴重問題,一個壞主機會嚴重影響整個LAN。第二是盡可能優化網絡路徑。例如,在firewall(7)中我們描述了一個保護內部主機的拓撲結構,外部可視主機不通過它路由。按照你的需要,使用100BaseT而不是10BaseT,或使用1000BaseT而不是100BaseT。許多瓶頸發生在廣域網連接上(例如mode,T1,DSL等)。如果要擴展鏈路是不可能的,可以使用dummynet(4)功能實現流量限制以阻止高負載服務(例如web服務)影響其他服務 (例如email服務),或正好相反。在家庭安裝中,可以讓交互式的傳輸的優先級高於你輸出的其他服務(web服務,email等)。

Copyright © Linux教程網 All Rights Reserved