按照傳統(tǒng),Linux不同的發(fā)行版本和不同的內(nèi)核對(duì)各項(xiàng)參數(shù)及設(shè)置均做了改動(dòng),從而使得系統(tǒng)能夠獲得更好的性能。下邊將分四部分介紹在Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server系統(tǒng)下,如何用以下幾種技巧進(jìn)行性能的優(yōu)化:
1、Disabling daemons (關(guān)閉 daemons) 2、Shutting down the GUI (關(guān)閉GUI) 3、Changing kernel parameters (改變內(nèi)核參數(shù)) 4、Kernel parameters (內(nèi)核參數(shù)) 5、Tuning the processor subsystem(處理器子系統(tǒng)調(diào)優(yōu)) 6、Tuning the memory subsystem (內(nèi)存子系統(tǒng)調(diào)優(yōu)) 7、Tuning the file system(文件系統(tǒng)子系統(tǒng)調(diào)優(yōu)) 8、Tuning the network subsystem(網(wǎng)絡(luò)子系統(tǒng)調(diào)優(yōu)) |
1 關(guān)閉daemons
有些運(yùn)行在服務(wù)器中的daemons (后臺(tái)服務(wù)),并不是完全必要的。關(guān)閉這些daemons可釋放更多的內(nèi)存、減少啟動(dòng)時(shí)間并減少CPU處理的進(jìn)程數(shù)。減少daemons數(shù)量的同時(shí)也增強(qiáng)了服務(wù)器的安全性。缺省情況下,多數(shù)服務(wù)器都可以安全地停掉幾個(gè)daemons。 Table 10-1列出了Red Hat Enterprise Linux AS下的可調(diào)整進(jìn)程. Table 10-2列出了SUSE LINUX Enterprise Server下的可調(diào)整進(jìn)程

注意:關(guān)閉xfs daemon將導(dǎo)致不能啟動(dòng)X,因此只有在不需要啟動(dòng)GUI圖形的時(shí)候才可以關(guān)閉xfs daemon。使用startx命令前,開(kāi)啟xfs daemon,恢復(fù)正常啟動(dòng)X。

可以根據(jù)需要停止某個(gè)進(jìn)程,如要停止sendmail 進(jìn)程,輸入如下命令: Red Hat: /sbin/service sendmail stop SUSE LINUX: /etc/init.d/sendmail stop 也可以配置在下次啟動(dòng)的時(shí)候不自動(dòng)啟動(dòng)某個(gè)進(jìn)程,還是sendmail: Red Hat: /sbin/chkconfig sendmail off SUSE LINUX: /sbin/chkconfig -s sendmail off 除此之外,LINUX還提供了圖形方式下的進(jìn)程管理功能。對(duì)于Red Hat,啟動(dòng)GUI,使用如下命令: /usr/bin/redhat-config-services 或者鼠標(biāo)點(diǎn)擊 Main Menu -> System Settings -> Server Settings -> Services.

提示:并非所有的daemons都會(huì)顯示在該配置界面,如要看到全部的daemons,使用如下命令: /sbin/chkconfig –list
對(duì)于SUSE LINUX,圖形界面是YaST2, 可用如下命令來(lái)啟動(dòng) /sbin/yast2 runlevel 或者如Figure 10-2所示用鼠標(biāo)點(diǎn)擊 Browse: YaST/ ?> YaST modules ?> System ?> Runlevel editor

2 關(guān)閉GUI
只要有可能,就不要在Linux server上啟動(dòng)GUI圖形,通常在Linux server上,沒(méi)有必要啟動(dòng)GUI。,所有的管理任務(wù)均可在命令行方式下完成、或者通過(guò)重定向X和Web瀏覽器界面。有幾個(gè)可用的基于Web的工具(例如webmin, Linuxconf, 和SWAT). 需要的時(shí)候啟動(dòng)GUI,用完馬上關(guān)閉GUI。多數(shù)情況,服務(wù)器運(yùn)行在runlevel 3,即在機(jī)器啟動(dòng)的時(shí)候不進(jìn)入GUI。命令行方式下,執(zhí)行startx 來(lái)啟動(dòng)Xserver.
1. 查看runlevel的命令:runlevel 會(huì)顯示出上次和當(dāng)前的runlevel (如N 5 表示沒(méi)有上次的runlevel (N) ,當(dāng)前的runlevel是5). 2. 在不同的runlevels之間切換,使用命令 init 如切換到run level 3,鍵入命令init 3
下邊是對(duì)Linux中不同runlevels的簡(jiǎn)要描述 – 0 – Halt 停機(jī)(不要將0設(shè)置為缺省,否則服務(wù)器啟動(dòng)后就會(huì)馬上關(guān)閉) – 1 - Single user mode 單用戶(hù)模式 – 2 - Multi-user 不帶NFS的多用戶(hù)模式 (如果沒(méi)有網(wǎng)絡(luò),相當(dāng)與3) – 3 - Full multi-user mode 完全多用戶(hù)模式 – 4 – Unused 未使用 – 5 - X11 – 6 – Reboot 重啟(不要將6設(shè)置為缺省,否則服務(wù)器會(huì)不斷地重啟)
修改文件/etc/inittab 來(lái)設(shè)置機(jī)器啟動(dòng)的runlevel,如Figure 10-3。

對(duì)于SUSE LINUX Enterprise Server, 執(zhí)行YaST runlevel 命令改變?nèi)笔unlevel值. 如圖Figure 10-2。
缺省情況下,保存了6個(gè)控制臺(tái):F1……F6。為節(jié)省內(nèi)存,可以減少為3個(gè)。使用mingetty ttyx命令來(lái)實(shí)現(xiàn),如圖Figure 10-3 提示:即便是已經(jīng)關(guān)閉了GUI,依然可以遠(yuǎn)程連接并啟動(dòng)GUI,可以使用ssh-x
3 改變內(nèi)核參數(shù)
Linux內(nèi)核是操作系統(tǒng)的核心,對(duì)所有的Linux發(fā)行版本是通用的。內(nèi)核參數(shù)可以改變,在命令行下執(zhí)行sysctl 命令。
提示:缺省情況下,LINUX內(nèi)核包括不必重啟就可以使用sysctl命令的必要的模塊。盡管如此,如果你在安裝系統(tǒng)的時(shí)候選擇移除該功能,那么你只有重新啟動(dòng)LINUX,才可以使得改變生效。
SUSE LINUX 提供了圖形界面下的修改方式。使用如下命令來(lái)啟動(dòng)powertweak工具: /sbin/yast powertweak 使用如下命令啟動(dòng)基于字符的管理菜單: /sbin/yast2 powertweak

Red Hat也提供了圖形界面下更改sysctl參數(shù)的方式: /usr/bin/redhat-config-proc如圖Figure 10-5

Parameter storage locations 內(nèi)核參數(shù)保存在/proc(特別是/proc/sys),提供了內(nèi)核、處理器、內(nèi)存、網(wǎng)絡(luò)及其他組件的相關(guān)參數(shù)。每個(gè)執(zhí)行的進(jìn)程都有一個(gè)以相應(yīng)PID命名的目錄。Figure 10-3列出了一些包括內(nèi)核信息的文件。


4 內(nèi)核的參數(shù)
Table 10-5 列出了Red Hat V2.4與性能關(guān)系密切的一些內(nèi)核參數(shù)。


4 內(nèi)核的參數(shù)
Table 10-5 列出了Red Hat V2.4與性能關(guān)系密切的一些內(nèi)核參數(shù)。


5 處理器子系統(tǒng)調(diào)優(yōu)
處理器對(duì)于應(yīng)用和數(shù)據(jù)庫(kù)服務(wù)器來(lái)講是最重要的硬件子系統(tǒng)之一。然而在這些系統(tǒng)中,CPU經(jīng)常是性能的瓶頸。 在配有Xeon處理器的高端服務(wù)器中,你可以啟用或者關(guān)閉Hyper-Threading(超線程功能)。Hyper-Threading在操作系統(tǒng)里將一顆處理器虛擬化為兩顆使用。Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server都支持該功能,從而可以使處理器在同一時(shí)刻執(zhí)行兩個(gè)線程或者進(jìn)程。對(duì)于支持Hyper-Threading的操作系統(tǒng)和軟件來(lái)說(shuō),不需要增加CPU時(shí)鐘頻率即可使性能得到明顯的改進(jìn)。例如,在4路的服務(wù)器上起用Hyper-Threading功能并使用性能監(jiān)測(cè)工具(如top)來(lái)檢測(cè),可以看到8顆處理器。如圖Figure 10-6

提示,對(duì)于Hyper-Threading: _ 基于SMP內(nèi)核的LINUX才可以支持Hyper-Threading _ 安裝的CPU數(shù)量越多,從Hyper-Threading獲得的性能上的提高就越少??色@得的性能提高大約為: – 2顆物理CPU: 15-25% – – 4顆物理CPU: 1-13% – – 8顆物理CPU: 0-5% – 如需更多的關(guān)于Hyper-Threading信息,可瀏覽: http://www.intel.com/business/bss/products/hyperthreading/server/ EM64T是Intel IA-32處理器的64-bit擴(kuò)展。意思是,處理器能夠支持更多的內(nèi)存并支持64-bit應(yīng)用同時(shí)完全兼容現(xiàn)存的32-bit應(yīng)用。Red Hat Enterprise Linux 3 Update 2 和 SUSE LINUX Enterprise Server 9支持這種新的處理器。如需更多的EM64T信息,可瀏覽: http://www.intel.com/technology/64bitextensions/ 選擇正確的內(nèi)核 Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server都包括有若干個(gè)內(nèi)核包,如Table 10-6所列。選擇合適的內(nèi)核對(duì)性能非常重要。

6 內(nèi)存子系統(tǒng)的調(diào)優(yōu)
內(nèi)存子系統(tǒng)的調(diào)優(yōu)不是很容易,需要不停地監(jiān)測(cè)來(lái)保證內(nèi)存的改變不會(huì)對(duì)服務(wù)器的其他子系統(tǒng)造成負(fù)面影響。如果要改變虛擬內(nèi)存參數(shù)(在/proc/sys/vm),建議您每次只改變一個(gè)參數(shù)然后監(jiān)測(cè)效果。對(duì)與虛擬內(nèi)存的調(diào)整包括以下幾個(gè)項(xiàng)目: _ 配置Linux內(nèi)核如何更新dirty buffers到磁盤(pán)。磁盤(pán)緩沖區(qū)用于暫存磁盤(pán)的數(shù)據(jù)。相對(duì)于內(nèi)存來(lái)講,磁盤(pán)緩沖區(qū)的速度很慢。因此,如果服務(wù)器使用這類(lèi)內(nèi)存,性能會(huì)成問(wèn)題。當(dāng)緩沖區(qū)內(nèi)的數(shù)據(jù)完全dirty,使用:sysctl -w vm.bdflush="30 500 0 0 500 3000 60 20 0" vm.bdflush有9個(gè)參數(shù),但是建議您只改變其中的3個(gè): 1 nfract, 為排隊(duì)寫(xiě)入磁盤(pán)前,bdflush daemon允許的緩沖區(qū)最大百分比 2 ndirty, 為bdflush即刻寫(xiě)的最大緩沖區(qū)的值。如果這個(gè)值很大,bdflush需要更多的時(shí)間完成磁盤(pán)的數(shù)據(jù)更新。 7 nfract_sync, 發(fā)生同步前,緩沖區(qū)變dirty的最大百分比。 配置kswapd daemon,指定Linux的內(nèi)存交換頁(yè)數(shù)量 sysctl -w vm.kswapd="1024 32 64" 三個(gè)參數(shù)的描述如下: – tries_base 相當(dāng)于內(nèi)核每次所交換的“頁(yè)”的數(shù)量的四倍。對(duì)于有很多交換信息的系統(tǒng),增加這個(gè)值可以改進(jìn)性能。 – tries_min 是每次kswapd swaps出去的pages的最小數(shù)量。 – swap_cluster 是kswapd 即刻寫(xiě)如的pages數(shù)量。數(shù)值小,會(huì)提高磁盤(pán)I/O的性能;數(shù)值大可能也會(huì)對(duì)請(qǐng)求隊(duì)列產(chǎn)生負(fù)面影響。 如果要對(duì)這些參數(shù)進(jìn)行改動(dòng),請(qǐng)使用工具vmstat檢查對(duì)性能的影響。其它可以改進(jìn)性能的虛擬內(nèi)存參數(shù)為: _ buffermem _ freepages _ overcommit_memory _ page-cluster _ pagecache _ pagetable_cache
8 網(wǎng)絡(luò)子系統(tǒng)的調(diào)優(yōu)
操作系統(tǒng)安裝完畢,就要對(duì)網(wǎng)絡(luò)子系統(tǒng)進(jìn)行調(diào)優(yōu)。對(duì)其它子系統(tǒng)的影響:影響CPU利用率,尤其在有大量TCP連接、塊尺寸又非常小時(shí),內(nèi)存的使用會(huì)明顯增加。 如何預(yù)防性能下降 如下的sysctl命令用于改變安全設(shè)置,但是它也可以防止網(wǎng)絡(luò)性能的下降。這些命令被設(shè)置為缺省值。
◆關(guān)閉如下參數(shù)可以防止黑客對(duì)服務(wù)器IP地址的攻擊

◆開(kāi)啟TCP SYN cookies,保護(hù)服務(wù)器避免受syn-flood攻擊,包括服務(wù)取決denial-of-service (DoS) 或者分布式服務(wù)拒絕distributed denial-of-service (DDoS) (僅適用Red Hat Enterprise Linux AS)

◆以下命令使服務(wù)器忽略來(lái)自被列入網(wǎng)關(guān)的服務(wù)器的重定向。因重定向可以被用來(lái)進(jìn)行攻擊,所以我們只接受有可靠來(lái)源的重定向。

另外,你可以配置接受或拒絕任何ICMP重定向。ICMP重定向是路由器傳輸路由信息的機(jī)制。比如,當(dāng)網(wǎng)關(guān)接收到來(lái)自所接網(wǎng)絡(luò)主機(jī)的Internet數(shù)據(jù)報(bào)時(shí),網(wǎng)關(guān)可以發(fā)送重定向信息到一臺(tái)主機(jī)。網(wǎng)關(guān)檢查路由表獲得下一個(gè)網(wǎng)關(guān)的地址,第二個(gè)網(wǎng)關(guān)將數(shù)據(jù)報(bào)路由到目標(biāo)網(wǎng)絡(luò).關(guān)閉這些重定向得命令如下:

◆如果這個(gè)服務(wù)器不是一臺(tái)路由器,那么它不會(huì)發(fā)送重定向,所以可以關(guān)閉該功能:

◆配置服務(wù)器拒絕接受廣播風(fēng)暴或者smurf 攻擊attacks:

◆忽略所有icmp包或者pings:

◆有些路由器針對(duì)廣播禎發(fā)送無(wú)效的回應(yīng),每個(gè)都產(chǎn)生警告并在內(nèi)核產(chǎn)生日志.這些回應(yīng)可以被忽略:

針對(duì)TCP和UDP的調(diào)優(yōu)
下邊的命令用來(lái)對(duì)連接數(shù)量非常大的服務(wù)器進(jìn)行調(diào)優(yōu).
◆對(duì)于同時(shí)支持很多連接的服務(wù)器,新的連接可以重新使用TIME-WAIT套接字. 這對(duì)于Web服務(wù)器非常有效:

如果你使用該命令,還要啟動(dòng)TIME-WAIT 套接字狀態(tài)的快速循環(huán)功能:

圖Figure 10-7顯示出將這些功能啟用,連接數(shù)量明顯降低.因?yàn)槊總€(gè)TCP傳輸都包含遠(yuǎn)程客戶(hù)端的協(xié)議信息緩存,所以有利于提高性能.緩存中存放round-trip時(shí)間、最大segment大小、擁塞窗口的信息。

◆參數(shù)tcp_fin_timeout 是套接字關(guān)閉時(shí),保持FIN-WAIT-2狀態(tài)的時(shí)間。一個(gè)TCP連接以three-segment SYN序列開(kāi)始, 以three-segment FIN序列結(jié)束.均不保留數(shù)據(jù).通過(guò)改變tcp_fin_timeout的值, 從FIN序列到內(nèi)存可以空閑出來(lái)處理新連接的時(shí)間縮短了,使性能得到改進(jìn).改變這個(gè)值的前要經(jīng)過(guò)認(rèn)真的監(jiān)測(cè),避免因?yàn)樗捞捉幼衷斐蓛?nèi)存溢出.

◆服務(wù)器的一個(gè)問(wèn)題是,同一時(shí)刻的大量TCP連接里有很多的連接被打開(kāi)但是沒(méi)有使用. TCP的keepalive功能檢測(cè)到這些連接,缺省情況下,在2小時(shí)之后丟掉. 2個(gè)小時(shí)的可能導(dǎo)致內(nèi)存過(guò)度使用,降低性能.因此改成1800秒(30分鐘)是個(gè)更好的選擇:

◆對(duì)于所有協(xié)議的隊(duì)列,設(shè)置最大系統(tǒng)發(fā)送緩存(wmem) 和接收緩存(rmem)到8MB

這些設(shè)置指定了創(chuàng)建TCP套接字時(shí)為其分配的內(nèi)存容量. 另外,使用如下命令發(fā)送和接收緩存.該命令設(shè)定了三個(gè)值:最小值、初始值和最大值:

第三個(gè)值必須小于或等于wmem_max和rmem_max。
◆(SUSE LINUX Enterprise Server適用) 通過(guò)保留路徑驗(yàn)證來(lái)源數(shù)據(jù)包。缺省情況下,路由器轉(zhuǎn)發(fā)所有的數(shù)據(jù)包,即便是明顯的異常網(wǎng)絡(luò)流量。通過(guò)啟動(dòng)和是的過(guò)濾功能,丟掉這些數(shù)據(jù)包:

◆當(dāng)服務(wù)器負(fù)載繁重或者是有很多客戶(hù)端都是超長(zhǎng)延時(shí)的連接故障,可能會(huì)導(dǎo)致half-open連接數(shù)量的增加。這對(duì)于Web服務(wù)器很來(lái)講很平常,尤其有很多撥號(hào)客戶(hù)時(shí).這些half-open連接保存在 backlog connections 隊(duì)列中.將這個(gè)值最少設(shè)置為4096 (缺省為1024). 即便是服務(wù)器不接收這類(lèi)連接,設(shè)置這個(gè)值還能防止受到denial-of-service (syn-flood)的攻擊.

◆設(shè)置ipfrag參數(shù),尤其是NFS和Samba服務(wù)器。這里,我們可以設(shè)置用于重新組合IP碎片的最大、最小內(nèi)存。當(dāng)ipfrag_high_thresh值被指派,碎片會(huì)被丟棄直到達(dá)到ipfrag_low_thres值。 當(dāng)TCP數(shù)據(jù)包傳輸發(fā)生錯(cuò)誤時(shí),開(kāi)始碎片整理。有效的數(shù)據(jù)包保留在內(nèi)存,同時(shí)損壞的數(shù)據(jù)包被轉(zhuǎn)發(fā)。例如,設(shè)置可用內(nèi)存范圍從256 MB到384 MB:

|