沈建苗編譯
當(dāng)系統(tǒng)遇到性能問題時(shí),你可能首先會(huì)想到幾個(gè)典型的瓶頸,像處理器、內(nèi)存、磁盤和網(wǎng)絡(luò)。其實(shí),這些只是開始尋找瓶頸的入手點(diǎn),但它們不是惟一隱藏著性能問題的瓶頸。下面列出了常見的10個(gè)可能存在問題的瓶頸。
1. 處理器
處理器是計(jì)算機(jī)中執(zhí)行計(jì)算和指令操作的核心部件。處理器可以處理數(shù)以百萬計(jì)的計(jì)算和指令,但是,當(dāng)這些操作的數(shù)量超過處理器的能力后,性能就會(huì)受到影響。如果處理器持續(xù)忙碌的時(shí)間超過75%,整個(gè)系統(tǒng)的運(yùn)行速度就會(huì)減慢。處理器需要留出一些余地,以處理一些“突發(fā)”狀況,使要處理的負(fù)載在很短的時(shí)間內(nèi)達(dá)到100%。處理器負(fù)載是導(dǎo)致性能瓶頸的一個(gè)常見來源。
2. 內(nèi)存
內(nèi)存方面的一條經(jīng)驗(yàn)法則法是“添加更多的內(nèi)存”。當(dāng)性能問題指向內(nèi)存時(shí),解決這個(gè)問題的一般做法是,添加更多的內(nèi)存。不過,這個(gè)做法只會(huì)在短期內(nèi)有效。指向內(nèi)存的性能瓶頸常常歸因于軟件設(shè)計(jì)欠佳,造成內(nèi)存泄漏(memory leaks),或者表現(xiàn)為內(nèi)存問題的其他系統(tǒng)缺陷。要解決內(nèi)存性能問題,其關(guān)鍵是在添加更多內(nèi)存之前找到癥狀的根源。
3. 存儲(chǔ)系統(tǒng)
磁盤的速度、RAID類型、存儲(chǔ)類型和控制器技術(shù)共同組成了所謂的磁盤輸入/輸出系統(tǒng)。磁盤輸入/輸出系統(tǒng)是系統(tǒng)管理員和用戶都很憂慮的性能問題的一個(gè)常見來源。就算使用當(dāng)今最出色的磁盤技術(shù),也有實(shí)際和物理的性能限制。合并和分離磁盤上的負(fù)載時(shí),要運(yùn)用最佳實(shí)踐。盡管存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN)很吸引人,但本地磁盤仍比速度最快的SAN要快。
4. 網(wǎng)絡(luò)
網(wǎng)絡(luò)經(jīng)常被錯(cuò)怪成性能瓶頸來源,而實(shí)際上很少是這樣。除非網(wǎng)絡(luò)部件出現(xiàn)了硬件故障,比如交換機(jī)端口受損、電纜壞掉、網(wǎng)卡出現(xiàn)異?;蛘呗酚善髋渲糜袉栴},否則應(yīng)該看看其他環(huán)節(jié),找出“網(wǎng)絡(luò)”的性能瓶頸。網(wǎng)速明顯變慢通常歸因于本文提到的其他九個(gè)瓶頸中的一個(gè)。
5. 應(yīng)用軟件
盡管應(yīng)用軟件開發(fā)人員不愛聽,但是,編得差勁的應(yīng)用軟件常常會(huì)以硬件問題的形式表現(xiàn)出來,而其實(shí)問題常常出在應(yīng)用軟件上,如某應(yīng)用軟件運(yùn)行時(shí),原本運(yùn)行順暢的系統(tǒng)性能大受影響;而當(dāng)它停止運(yùn)行后,系統(tǒng)的性能就沒有任何問題了。性能問題出現(xiàn)時(shí),系統(tǒng)管理員與開發(fā)人員經(jīng)常會(huì)爭執(zhí)不停,互相指責(zé)對(duì)方。其實(shí),結(jié)果經(jīng)常是經(jīng)過了數(shù)百個(gè)小時(shí)查找硬件性能后,發(fā)現(xiàn)原來錯(cuò)在應(yīng)用軟件上。
6. 惡意軟件
在發(fā)現(xiàn)的性能瓶頸中,病毒、特洛伊木馬和間諜軟件占了很大一部分。當(dāng)出現(xiàn)棘手問題時(shí),用戶老是抱怨網(wǎng)絡(luò)、應(yīng)用軟件或者計(jì)算機(jī),而降低性能的那些惡意軟件可能隱藏在一個(gè)或者多個(gè)服務(wù)器系統(tǒng)上、用戶工作站上,或者兩者兼而有之。被惡意軟件感染的現(xiàn)象很普遍,所以必須采用多層防御機(jī)制來防范。殺毒軟件、反間諜軟件、本地防火墻、網(wǎng)絡(luò)防火墻和定期打補(bǔ)丁的做法,將有助于保護(hù)系統(tǒng),防止由此帶來的瓶頸。
7. 工作負(fù)載
智能工作負(fù)載管理有助于防止工作負(fù)載沒有平衡好或者負(fù)載平衡方案考慮不周而引起的性能問題。為性能有問題的集群添加另一個(gè)系統(tǒng),雖然這樣可以減輕壓力,但是這個(gè)步驟在虛擬環(huán)境下比在物理環(huán)境下更容易完成。這方面給出的建議是,衡量所有系統(tǒng)的能力和性能,并留意報(bào)告的數(shù)據(jù),轉(zhuǎn)移工作負(fù)載,添加系統(tǒng),并留意性能。
8. 硬件出現(xiàn)故障或過時(shí)
硬件越舊,出故障的可能性就越大。有些硬件部件一下子就壞掉了,而有些經(jīng)常出現(xiàn)隨機(jī)性故障,卻又查不出毛病。由于沒法預(yù)測硬件何時(shí)會(huì)導(dǎo)致系統(tǒng)重啟、數(shù)據(jù)丟失或性能瓶頸,這讓系統(tǒng)管理員大傷腦筋。要防止這種災(zāi)難出現(xiàn),最好的辦法是保持硬件常新,使用冗余硬件,并認(rèn)真監(jiān)控系統(tǒng)。
9. 文件系統(tǒng)
所選擇的文件系統(tǒng)是否會(huì)對(duì)性能產(chǎn)生深遠(yuǎn)的影響?答案是肯定的。有些文件系統(tǒng)(如JFS)使用的處理器資源很少;XFS具有很高的擴(kuò)展性和性能;NTFS是一個(gè)可恢復(fù)的高性能文件系統(tǒng);新的EXT4文件系統(tǒng)能夠有效地支持超大文件。每種文件系統(tǒng)都有其用途,要是為應(yīng)用軟件選錯(cuò)了文件系統(tǒng),就會(huì)帶來嚴(yán)重后果。要慎重考慮和選擇文件系統(tǒng),應(yīng)選擇最適合處理你工作的文件系統(tǒng)。沒有面面俱到的文件系統(tǒng)。
10. 技術(shù)
基礎(chǔ)架構(gòu)所選擇的技術(shù)對(duì)于性能起著至關(guān)重要的作用。比如說,如果一項(xiàng)應(yīng)用是基于虛擬化基礎(chǔ)架構(gòu),那么,可能會(huì)遇到在物理系統(tǒng)上不會(huì)遇到的性能問題。另外,有些工作負(fù)載用虛擬化技術(shù)來處理速度很快,比如,LAMP(Linux、Apache、MySQL、PHP)工作負(fù)載用KVM來處理,就與用原生系統(tǒng)來處理一樣快,甚至更快。不過,容器式的(container-type)虛擬化技術(shù)(OpenVZ、Parallels和Solaris Zones)聲稱,對(duì)任何工作負(fù)載來說,它們都能達(dá)到原生系統(tǒng)的速度。