淺談 Linux 的性能調(diào)優(yōu)的思路


系統(tǒng)的性能是指操作系統(tǒng)完成任務(wù)的有效性、穩(wěn)定性和響應(yīng)速度。
Linux系統(tǒng)管理員可能經(jīng)常會(huì)遇到系統(tǒng)不穩(wěn)定、響應(yīng)速度慢等問(wèn)題,例如在Linux上搭建了一個(gè)web服務(wù),經(jīng)常出現(xiàn)網(wǎng)頁(yè)無(wú)法打開(kāi)、打開(kāi)速度慢等現(xiàn)象,而遇到這些問(wèn)題,就有人會(huì)抱怨Linux系統(tǒng)不好,其實(shí)這些都是表面現(xiàn)象。
操作系統(tǒng)完成一個(gè)任務(wù)時(shí),與系統(tǒng)自身設(shè)置、網(wǎng)絡(luò)拓樸結(jié)構(gòu)、路由設(shè)備、路由策略、接入設(shè)備、物理線路等多個(gè)方面都密切相關(guān),任何一個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題,都會(huì)影響整個(gè)系統(tǒng)的性能。
因此當(dāng)Linux應(yīng)用出現(xiàn)問(wèn)題時(shí),應(yīng)當(dāng)從應(yīng)用程序、操作系統(tǒng)、服務(wù)器硬件、網(wǎng)絡(luò)環(huán)境等方面綜合排查,定位問(wèn)題出現(xiàn)在哪個(gè)部分,然后集中解決。
在應(yīng)用程序、操作系統(tǒng)、服務(wù)器硬件、網(wǎng)絡(luò)環(huán)境等方面,影響性能最大的是應(yīng)用程序和操作系統(tǒng)兩個(gè)方面,因?yàn)檫@兩個(gè)方面出現(xiàn)的問(wèn)題不易察覺(jué),隱蔽性很強(qiáng)。而硬件、網(wǎng)絡(luò)方面只要出現(xiàn)問(wèn)題,一般都能馬上定位。

下面主要講解操作系統(tǒng)方面的性能調(diào)優(yōu)思路,應(yīng)用程序方面需要具體問(wèn)題具體對(duì)待。
以下從影響Linux性能的因素、分析性能涉及的人員、系統(tǒng)性能優(yōu)化工具、系統(tǒng)性能評(píng)價(jià)標(biāo)準(zhǔn)四個(gè)方面介紹優(yōu)化Linux的一般思路和方法。
Linux系統(tǒng)采用了物理內(nèi)存和虛擬內(nèi)存兩種方式,虛擬內(nèi)存雖然可以緩解物理內(nèi)存的不足,但是占用過(guò)多的虛擬內(nèi)存,應(yīng)用程序的性能將明顯下降,要保證應(yīng)用程序的高性能運(yùn)行,物理內(nèi)存一定要足夠大;但是過(guò)大的物理內(nèi)存,會(huì)造成內(nèi)存資源浪費(fèi),例如,在一個(gè)32位處理器的Linux操作系統(tǒng)上,超過(guò)8GB的物理內(nèi)存都將被浪費(fèi)。

因此,要使用更大的內(nèi)存,建議安裝64位的操作系統(tǒng),同時(shí)開(kāi)啟Linux的大內(nèi)存內(nèi)核支持。
(3)磁盤(pán)I/O性能
磁盤(pán)的I/O性能直接影響應(yīng)用程序的性能,在一個(gè)有頻繁讀寫(xiě)的應(yīng)用中,如果磁盤(pán)I/O性能得不到滿足,就會(huì)導(dǎo)致應(yīng)用停滯。好在現(xiàn)今的磁盤(pán)都采用了很多方法來(lái)提高I/O性能,比如常見(jiàn)的磁盤(pán)RAID技術(shù)。
RAID 0:通過(guò)把多塊硬盤(pán)粘合成一個(gè)容量更大的硬盤(pán)組,提高了磁盤(pán)的性能和吞吐量。這種方式成本低,要求至少兩個(gè)磁盤(pán),但是沒(méi)有容錯(cuò)和數(shù)據(jù)修復(fù)功能,因而只能用在對(duì)數(shù)據(jù)安全性要求不高的環(huán)境中。
RAID 1:也就是磁盤(pán)鏡像,通過(guò)把一個(gè)磁盤(pán)的數(shù)據(jù)鏡像到另一個(gè)磁盤(pán)上,最大限度地保證磁盤(pán)數(shù)據(jù)的可靠性和可修復(fù)性,具有很高的數(shù)據(jù)冗余能力,但磁盤(pán)利用率只有50%,因而,成本最高,多用在保存重要數(shù)據(jù)的場(chǎng)合。
RAID5:采用了磁盤(pán)分段加奇偶校驗(yàn)技術(shù),從而提高了系統(tǒng)可靠性,RAID5讀出效率很高,寫(xiě)入效率一般,至少需要3塊盤(pán)。允許一塊磁盤(pán)故障,而不影響數(shù)據(jù)的可用性。
RAID0+1:把RAID0和RAID1技術(shù)結(jié)合起來(lái)就成了RAID0+1,至少需要4個(gè)硬盤(pán)。此種方式的數(shù)據(jù)除分布在多個(gè)盤(pán)上外,每個(gè)盤(pán)都有其鏡像盤(pán),提供全冗余能力,同時(shí)允許一個(gè)磁盤(pán)故障,而不影響數(shù)據(jù)可用性,并具有快速讀/寫(xiě)能力。
(4)網(wǎng)絡(luò)寬帶
例如,磁盤(pán)分配可以遵循應(yīng)用的需求:
對(duì)于對(duì)寫(xiě)操作頻繁而對(duì)數(shù)據(jù)安全性要求不高的應(yīng)用,可以把磁盤(pán)做成RAID 0;而對(duì)于對(duì)數(shù)據(jù)安全性較高,對(duì)讀寫(xiě)沒(méi)有特別要求的應(yīng)用,可以把磁盤(pán)做成RAID 1;對(duì)于對(duì)讀操作要求較高,而對(duì)寫(xiě)操作無(wú)特殊要求,并要保證數(shù)據(jù)安全性的應(yīng)用,可以選擇RAID 5;對(duì)于對(duì)讀寫(xiě)要求都很高,并且對(duì)數(shù)據(jù)安全性要求也很高的應(yīng)用,可以選擇RAID10/01。
這樣通過(guò)不同的應(yīng)用需求設(shè)置不同的RAID級(jí)別,在磁盤(pán)底層對(duì)系統(tǒng)進(jìn)行優(yōu)化操作。
隨著內(nèi)存價(jià)格的降低和內(nèi)存容量的日益增大,對(duì)虛擬內(nèi)存SWAP的設(shè)定,現(xiàn)在已經(jīng)沒(méi)有了所謂虛擬內(nèi)存是物理內(nèi)存兩倍的要求,但是SWAP的設(shè)定還是不能忽略,根據(jù)經(jīng)驗(yàn),如果內(nèi)存較小(物理內(nèi)存小于4GB),一般設(shè)置SWAP交換分區(qū)大小為內(nèi)存的2倍;
如果物理內(nèi)存大于8GB小于16GB,可以設(shè)置SWAP大小等于或略小于物理內(nèi)存即可;如果內(nèi)存大小在16GB以上,原則上可以設(shè)置SWAP為0,但并不建議這么做,因?yàn)樵O(shè)置一定大小的SWAP還是有一定作用的。
(3)文件系統(tǒng)優(yōu)化
文件系統(tǒng)的優(yōu)化也是系統(tǒng)資源優(yōu)化的一個(gè)重點(diǎn),在Linux下可選的文件系統(tǒng)有ext2、ext3、ReiserFS、ext4、xfs,根據(jù)不同的應(yīng)用,選擇不同的文件系統(tǒng)。
Linux標(biāo)準(zhǔn)文件系統(tǒng)是從VFS開(kāi)始的,然后是ext,接著就是ext2,應(yīng)該說(shuō),ext2是Linux上標(biāo)準(zhǔn)的文件系統(tǒng),ext3是在ext2基礎(chǔ)上增加日志形成的,從VFS到ext4,其設(shè)計(jì)思想沒(méi)有太大變化,都是早期UNIX家族基于超級(jí)塊和inode的設(shè)計(jì)理念。
XFS文件系統(tǒng)是一個(gè)高級(jí)日志文件系統(tǒng),XFS通過(guò)分布處理磁盤(pán)請(qǐng)求、定位數(shù)據(jù)、保持Cache 的一致性來(lái)提供對(duì)文件系統(tǒng)數(shù)據(jù)的低延遲、高帶寬的訪問(wèn),因此,XFS極具伸縮性,非常健壯,具有優(yōu)秀的日志記錄功能、可擴(kuò)展性強(qiáng)、快速寫(xiě)入性能等優(yōu)點(diǎn)。
2.3 應(yīng)用程序軟件資源
應(yīng)用程序的優(yōu)化其實(shí)是整個(gè)優(yōu)化工程的核心,如果一個(gè)應(yīng)用程序存在BUG,那么即使所有其他方面都達(dá)到了最優(yōu)狀態(tài),整個(gè)應(yīng)用系統(tǒng)還是性能低下,所以,對(duì)應(yīng)用程序的優(yōu)化是性能優(yōu)化過(guò)程的重中之重,這就對(duì)程序架構(gòu)設(shè)計(jì)人員和程序開(kāi)發(fā)人員提出了更高的要求。
首先,Linux運(yùn)維人員要了解和掌握操作系統(tǒng)的當(dāng)前運(yùn)行狀態(tài),例如系統(tǒng)負(fù)載、內(nèi)存狀態(tài)、進(jìn)程狀態(tài)、CPU負(fù)荷等信息,這些信息是檢測(cè)和判斷系統(tǒng)性能的基礎(chǔ)和依據(jù);
其次,Linux運(yùn)維人員還有掌握系統(tǒng)的硬件信息,例如磁盤(pán)I/O、CPU型號(hào)、內(nèi)存大小、網(wǎng)卡帶寬等參數(shù)信息,然后根據(jù)這些信息綜合評(píng)估系統(tǒng)資源的使用情況。
第三,作為一名Linux運(yùn)維人員,還要掌握應(yīng)用程序?qū)ο到y(tǒng)資源的使用情況,更深入的一點(diǎn)就是要了解應(yīng)用程序的運(yùn)行效率,例如是否有程序BUG、內(nèi)存溢出等問(wèn)題,通過(guò)對(duì)系統(tǒng)資源的監(jiān)控,就能發(fā)現(xiàn)應(yīng)用程序是否存在異常,如果確實(shí)是應(yīng)用程序存在問(wèn)題,需要把問(wèn)題立刻反映給程序開(kāi)發(fā)人員,進(jìn)而改進(jìn)或升級(jí)程序。
性能優(yōu)化本身就是一個(gè)復(fù)雜和繁瑣的過(guò)程,Linux運(yùn)維人員只有了解了系統(tǒng)硬件信息、網(wǎng)絡(luò)信息、操作系統(tǒng)配置信息和應(yīng)用程序信息才能有針對(duì)性地的展開(kāi)對(duì)服務(wù)器性能優(yōu)化,這就要求Linux運(yùn)維人員有充足的理論知識(shí)、豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)以及縝密分析問(wèn)題的頭腦。
首先,系統(tǒng)架構(gòu)設(shè)計(jì)人員要跟蹤了解程序的執(zhí)行效率,如果執(zhí)行效率存在問(wèn)題,要找出哪里出現(xiàn)了問(wèn)題;其次,如果真的是架構(gòu)設(shè)計(jì)出現(xiàn)了問(wèn)題,那么就要馬上優(yōu)化或改進(jìn)系統(tǒng)架構(gòu),設(shè)計(jì)更好的應(yīng)用系統(tǒng)架構(gòu)。
例如,Linux運(yùn)維人員在系統(tǒng)中發(fā)現(xiàn)有條SQL語(yǔ)句耗費(fèi)大量的系統(tǒng)資源,抓取這條執(zhí)行的SQL語(yǔ)句,發(fā)現(xiàn)此SQL語(yǔ)句的執(zhí)行效率太差,是開(kāi)發(fā)人員編寫(xiě)的代碼執(zhí)行效率低造成的,這就需要把這個(gè)信息反饋給開(kāi)發(fā)人員,開(kāi)發(fā)人員在收到這個(gè)問(wèn)題后,可以有針對(duì)性的進(jìn)行SQL優(yōu)化,進(jìn)而實(shí)現(xiàn)程序代碼的優(yōu)化。
從上面這個(gè)過(guò)程可以看出,系統(tǒng)性能優(yōu)化一般遵循的流程是:
首先Linux運(yùn)維人員查看系統(tǒng)的整體狀況,主要從系統(tǒng)硬件、網(wǎng)絡(luò)設(shè)備、操作系統(tǒng)配置、應(yīng)用程序架構(gòu)和程序代碼五個(gè)方面進(jìn)行綜合判斷;
如果發(fā)現(xiàn)是系統(tǒng)硬件、網(wǎng)絡(luò)設(shè)備或者操作系統(tǒng)配置問(wèn)題,Linux運(yùn)維人員可以根據(jù)情況自主解決;
如果發(fā)現(xiàn)是程序結(jié)構(gòu)問(wèn)題,就需要提交給程序架構(gòu)設(shè)計(jì)人員;
如果發(fā)現(xiàn)是程序代碼執(zhí)行問(wèn)題,就交給開(kāi)發(fā)人員進(jìn)行代碼優(yōu)化。這樣就完成了一個(gè)系統(tǒng)性能優(yōu)化的過(guò)程。
10T 技術(shù)資源大放送!包括但不限于:Linux、虛擬化、容器、云計(jì)算、網(wǎng)絡(luò)、Python、Go 等。在 開(kāi)源Linux 公眾號(hào)內(nèi)回復(fù) 10T,即可免費(fèi)獲取!
有收獲,點(diǎn)個(gè)在看



