按照傳統(tǒng),Linux不同的發(fā)行版本和不同的內(nèi)核對各項參數(shù)及設(shè)置均做了改動,從而使得系統(tǒng)能夠獲得更好的性能。下邊將分四部分介紹在Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server系統(tǒng)下,如何用以下幾種技巧進(jìn)行性能的優(yōu)化:
QUOTE: |
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
有些運行在服務(wù)器中的daemons (后臺服務(wù)),并不是完全必要的。關(guān)閉這些daemons可釋放更多的內(nèi)存、減少啟動時間并減少CPU處理的進(jìn)程數(shù)。減少daemons數(shù)量的同時也增強(qiáng)了服務(wù)器的安全性。缺省情況下,多數(shù)服務(wù)器都可以安全地停掉幾個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)致不能啟動X,因此只有在不需要啟動GUI圖形的時候才可以關(guān)閉xfs daemon。使用startx命令前,開啟xfs daemon,恢復(fù)正常啟動X。
可以根據(jù)需要停止某個進(jìn)程,如要停止sendmail 進(jìn)程,輸入如下命令:
Red Hat: /sbin/service sendmail stop
SUSE LINUX: /etc/init.d/sendmail stop
也可以配置在下次啟動的時候不自動啟動某個進(jìn)程,還是sendmail:
Red Hat: /sbin/chkconfig sendmail off
SUSE LINUX: /sbin/chkconfig -s sendmail off
除此之外,LINUX還提供了圖形方式下的進(jìn)程管理功能。對于Red Hat,啟動GUI,使用如下命令: /usr/bin/redhat-config-services 或者鼠標(biāo)點擊 Main Menu -> System Settings ->
Server Settings -> Services.
提示:并非所有的daemons都會顯示在該配置界面,如要看到全部的daemons,使用如下命令:
/sbin/chkconfig –list
對于SUSE LINUX,圖形界面是YaST2, 可用如下命令來啟動
/sbin/yast2 runlevel 或者如Figure 10-2所示用鼠標(biāo)點擊
Browse: YaST/ ?> YaST modules ?> System ?> Runlevel editor
對于SUSE LINUX Enterprise Server, 執(zhí)行YaST runlevel 命令改變?nèi)笔unlevel值.
如圖Figure 10-2。
缺省情況下,保存了6個控制臺:F1……F6。為節(jié)省內(nèi)存,可以減少為3個。使用mingetty ttyx命令來實現(xiàn),如圖Figure 10-3
提示:即便是已經(jīng)關(guān)閉了GUI,依然可以遠(yuǎn)程連接并啟動GUI,可以使用ssh-x
3 改變內(nèi)核參數(shù)
Linux內(nèi)核是操作系統(tǒng)的核心,對所有的Linux發(fā)行版本是通用的。內(nèi)核參數(shù)可以改變,在命令行下執(zhí)行sysctl 命令。
提示:缺省情況下,LINUX內(nèi)核包括不必重啟就可以使用sysctl命令的必要的模塊。盡管如此,如果你在安裝系統(tǒng)的時候選擇移除該功能,那么你只有重新啟動LINUX,才可以使得改變生效。
SUSE LINUX 提供了圖形界面下的修改方式。使用如下命令來啟動powertweak工具:
/sbin/yast powertweak
使用如下命令啟動基于字符的管理菜單:
/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ù)。每個執(zhí)行的進(jìn)程都有一個以相應(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)
處理器對于應(yīng)用和數(shù)據(jù)庫服務(wù)器來講是最重要的硬件子系統(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都支持該功能,從而可以使處理器在同一時刻執(zhí)行兩個線程或者進(jìn)程。對于支持Hyper-Threading的操作系統(tǒng)和軟件來說,不需要增加CPU時鐘頻率即可使性能得到明顯的改進(jìn)。例如,在4路的服務(wù)器上起用Hyper-Threading功能并使用性能監(jiān)測工具(如top)來檢測,可以看到8顆處理器。如圖Figure 10-6
提示,對于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)用同時完全兼容現(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都包括有若干個內(nèi)核包,如Table 10-6所列。選擇合適的內(nèi)核對性能非常重要。
6 內(nèi)存子系統(tǒng)的調(diào)優(yōu)
內(nèi)存子系統(tǒng)的調(diào)優(yōu)不是很容易,需要不停地監(jiān)測來保證內(nèi)存的改變不會對服務(wù)器的其他子系統(tǒng)造成負(fù)面影響。如果要改變虛擬內(nèi)存參數(shù)(在/proc/sys/vm),建議您每次只改變一個參數(shù)然后監(jiān)測效果。對與虛擬內(nèi)存的調(diào)整包括以下幾個項目:
_ 配置Linux內(nèi)核如何更新dirty buffers到磁盤。磁盤緩沖區(qū)用于暫存磁盤的數(shù)據(jù)。相對于內(nèi)存來講,磁盤緩沖區(qū)的速度很慢。因此,如果服務(wù)器使用這類內(nèi)存,性能會成問題。當(dāng)緩沖區(qū)內(nèi)的數(shù)據(jù)完全dirty,使用:sysctl -w vm.bdflush="30 500 0 0 500 3000 60 20 0"
vm.bdflush有9個參數(shù),但是建議您只改變其中的3個:
1 nfract, 為排隊寫入磁盤前,bdflush daemon允許的緩沖區(qū)最大百分比
2 ndirty, 為bdflush即刻寫的最大緩沖區(qū)的值。如果這個值很大,bdflush需要更多的時間完成磁盤的數(shù)據(jù)更新。
7 nfract_sync, 發(fā)生同步前,緩沖區(qū)變dirty的最大百分比。
配置kswapd daemon,指定Linux的內(nèi)存交換頁數(shù)量
sysctl -w vm.kswapd="1024 32 64"
三個參數(shù)的描述如下:
– tries_base 相當(dāng)于內(nèi)核每次所交換的“頁”的數(shù)量的四倍。對于有很多交換信息的系統(tǒng),增加這個值可以改進(jìn)性能。
– tries_min 是每次kswapd swaps出去的pages的最小數(shù)量。
– swap_cluster 是kswapd 即刻寫如的pages數(shù)量。數(shù)值小,會提高磁盤I/O的性能;數(shù)值大可能也會對請求隊列產(chǎn)生負(fù)面影響。
如果要對這些參數(shù)進(jìn)行改動,請使用工具vmstat檢查對性能的影響。其它可以改進(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)安裝完畢,就要對網(wǎng)絡(luò)子系統(tǒng)進(jìn)行調(diào)優(yōu)。對其它子系統(tǒng)的影響:影響CPU利用率,尤其在有大量TCP連接、塊尺寸又非常小時,內(nèi)存的使用會明顯增加。
如何預(yù)防性能下降
如下的sysctl命令用于改變安全設(shè)置,但是它也可以防止網(wǎng)絡(luò)性能的下降。這些命令被設(shè)置為缺省值。
◆關(guān)閉如下參數(shù)可以防止黑客對服務(wù)器IP地址的攻擊
◆開啟TCP SYN cookies,保護(hù)服務(wù)器避免受syn-flood攻擊,包括服務(wù)取決denial-of-service (DoS) 或者分布式服務(wù)拒絕distributed denial-of-service (DDoS) (僅適用Red Hat Enterprise Linux AS)
◆以下命令使服務(wù)器忽略來自被列入網(wǎng)關(guān)的服務(wù)器的重定向。因重定向可以被用來進(jìn)行攻擊,所以我們只接受有可靠來源的重定向。
另外,你可以配置接受或拒絕任何ICMP重定向。ICMP重定向是路由器傳輸路由信息的機(jī)制。比如,當(dāng)網(wǎng)關(guān)接收到來自所接網(wǎng)絡(luò)主機(jī)的Internet數(shù)據(jù)報時,網(wǎng)關(guān)可以發(fā)送重定向信息到一臺主機(jī)。網(wǎng)關(guān)檢查路由表獲得下一個網(wǎng)關(guān)的地址,第二個網(wǎng)關(guān)將數(shù)據(jù)報路由到目標(biāo)網(wǎng)絡(luò).關(guān)閉這些重定向得命令如下:
◆如果這個服務(wù)器不是一臺路由器,那么它不會發(fā)送重定向,所以可以關(guān)閉該功能:
◆配置服務(wù)器拒絕接受廣播風(fēng)暴或者smurf 攻擊attacks:
◆忽略所有icmp包或者pings:
◆有些路由器針對廣播禎發(fā)送無效的回應(yīng),每個都產(chǎn)生警告并在內(nèi)核產(chǎn)生日志.這些回應(yīng)可以被忽略:
針對TCP和UDP的調(diào)優(yōu)
下邊的命令用來對連接數(shù)量非常大的服務(wù)器進(jìn)行調(diào)優(yōu).
◆對于同時支持很多連接的服務(wù)器,新的連接可以重新使用TIME-WAIT套接字. 這對于Web服務(wù)器非常有效:
如果你使用該命令,還要啟動TIME-WAIT 套接字狀態(tài)的快速循環(huán)功能:
圖Figure 10-7顯示出將這些功能啟用,連接數(shù)量明顯降低.因為每個TCP傳輸都包含遠(yuǎn)程客戶端的協(xié)議信息緩存,所以有利于提高性能.緩存中存放round-trip時間、最大segment大小、擁塞窗口的信息。
◆參數(shù)tcp_fin_timeout 是套接字關(guān)閉時,保持FIN-WAIT-2狀態(tài)的時間。一個TCP連接以three-segment SYN序列開始, 以three-segment FIN序列結(jié)束.均不保留數(shù)據(jù).通過改變tcp_fin_timeout的值, 從FIN序列到內(nèi)存可以空閑出來處理新連接的時間縮短了,使性能得到改進(jìn).改變這個值的前要經(jīng)過認(rèn)真的監(jiān)測,避免因為死套接字造成內(nèi)存溢出.
◆服務(wù)器的一個問題是,同一時刻的大量TCP連接里有很多的連接被打開但是沒有使用. TCP的keepalive功能檢測到這些連接,缺省情況下,在2小時之后丟掉. 2個小時的可能導(dǎo)致內(nèi)存過度使用,降低性能.因此改成1800秒(30分鐘)是個更好的選擇:
◆對于所有協(xié)議的隊列,設(shè)置最大系統(tǒng)發(fā)送緩存(wmem) 和接收緩存(rmem)到8MB
這些設(shè)置指定了創(chuàng)建TCP套接字時為其分配的內(nèi)存容量. 另外,使用如下命令發(fā)送和接收緩存.該命令設(shè)定了三個值:最小值、初始值和最大值:
第三個值必須小于或等于wmem_max和rmem_max。
◆(SUSE LINUX Enterprise Server適用) 通過保留路徑驗證來源數(shù)據(jù)包。缺省情況下,路由器轉(zhuǎn)發(fā)所有的數(shù)據(jù)包,即便是明顯的異常網(wǎng)絡(luò)流量。通過啟動和是的過濾功能,丟掉這些數(shù)據(jù)包:
◆當(dāng)服務(wù)器負(fù)載繁重或者是有很多客戶端都是超長延時的連接故障,可能會導(dǎo)致half-open連接數(shù)量的增加。這對于Web服務(wù)器很來講很平常,尤其有很多撥號客戶時.這些half-open連接保存在 backlog connections 隊列中.將這個值最少設(shè)置為4096 (缺省為1024). 即便是服務(wù)器不接收這類連接,設(shè)置這個值還能防止受到denial-of-service (syn-flood)的攻擊.
◆設(shè)置ipfrag參數(shù),尤其是NFS和Samba服務(wù)器。這里,我們可以設(shè)置用于重新組合IP碎片的最大、最小內(nèi)存。當(dāng)ipfrag_high_thresh值被指派,碎片會被丟棄直到達(dá)到ipfrag_low_thres值。
當(dāng)TCP數(shù)據(jù)包傳輸發(fā)生錯誤時,開始碎片整理。有效的數(shù)據(jù)包保留在內(nèi)存,同時損壞的數(shù)據(jù)包被轉(zhuǎn)發(fā)。例如,設(shè)置可用內(nèi)存范圍從256 MB到384 MB: