摘?要:性能是一種典型的非功能性需求,然而又貫穿在信息化項(xiàng)目的實(shí)際使用中,直接影響系統(tǒng)運(yùn)行效率和用戶體驗(yàn)。也正是由于這一特性,性能無法簡單地通過單一的、直線式的思維來度量和管理,注定需要以系統(tǒng)工程的方法來掌握和調(diào)整。
關(guān)鍵詞:性能分析;性能優(yōu)化;運(yùn)維管理
隨著信息化基礎(chǔ)設(shè)施的完善,企業(yè)為提高自身獲取和處理信息能力,越來越多地選擇把企業(yè)原有的工作流數(shù)據(jù)集成到業(yè)務(wù)系統(tǒng)中去。自2005年以來,國內(nèi)企業(yè)進(jìn)行了大規(guī)模的信息化建設(shè),越來越多的企業(yè)定制開發(fā)屬于自己的信息系統(tǒng)并逐步投入使用。但隨著系統(tǒng)越建越多,信息系統(tǒng)的性能問題成為擺在運(yùn)維管理人員面前的大問題。為什么有些應(yīng)用程序經(jīng)??D,為什么業(yè)務(wù)網(wǎng)站又無法訪問,運(yùn)維管理人員怎樣才能找到哪個(gè)邏輯更慢,怎么樣才能做到優(yōu)化改善,對于性能優(yōu)化而言,最大的挑戰(zhàn)是性能分析。本文作者通過總結(jié)多年信息化基礎(chǔ)設(shè)施和信息系統(tǒng)運(yùn)維管理經(jīng)驗(yàn),從以下五個(gè)維度分析提煉出影響應(yīng)用程序性能的五個(gè)方面:
一、應(yīng)用程序
性能調(diào)整盡可能接近完成工作的地方:它們在應(yīng)用程序中是最好的。大多數(shù)情況下,一個(gè)應(yīng)用程序都包括負(fù)載均衡設(shè)備、應(yīng)用服務(wù)器、文件服務(wù)器、數(shù)據(jù)庫服務(wù)器等。應(yīng)用程序的內(nèi)部可能很復(fù)雜,有很多可能的代碼路徑和行為。應(yīng)用程序源代碼一般是萬行級,操作系統(tǒng)內(nèi)核則上至百萬行級。應(yīng)用程序性能分析包括了配置應(yīng)用程序?qū)崿F(xiàn)系統(tǒng)資源最佳利用、歸納應(yīng)用程序使用系統(tǒng)的方式,以及常見問題的分析。由于應(yīng)用程序設(shè)計(jì)不合理。一旦運(yùn)行,會(huì)頻繁觸發(fā)大量的內(nèi)存/硬盤交換異常,占用大量的CPU時(shí)鐘周期,導(dǎo)致無法響應(yīng)客戶端連接訪問需求。一個(gè)能有效提高應(yīng)用程序性能的方法是找到對應(yīng)生產(chǎn)環(huán)境工作負(fù)載的公用代碼路徑,并開始對其做優(yōu)化。如果應(yīng)用程序需要經(jīng)常與CPU交互,那么意味著代碼路徑會(huì)頻繁占用CPU。如果應(yīng)用程序需要經(jīng)常從硬盤等外設(shè)讀取數(shù)據(jù),則應(yīng)該查看導(dǎo)致頻繁I/O的代碼路徑。這些都能通過分析和剖析應(yīng)用程序來確定。
二、CPU資源
CPU是服務(wù)器硬件的核心,是系統(tǒng)性能分析的主要目標(biāo)之一,微軟、VMware等操作系統(tǒng)廠商會(huì)經(jīng)常發(fā)布針對 CPU 類型對應(yīng)用程序進(jìn)行優(yōu)化的建議?,F(xiàn)代系統(tǒng)一般有多顆CPU,通過內(nèi)核調(diào)度器共享給所有運(yùn)行軟件,當(dāng)需求的CPU資源超過了系統(tǒng)力所能及的范圍時(shí),進(jìn)程里的任務(wù)就會(huì)排隊(duì),等待輪詢運(yùn)行的機(jī)會(huì),等待給應(yīng)用程序的運(yùn)行帶來延時(shí),使得性能下降。應(yīng)用程序在CPU的運(yùn)行時(shí)間可以通過編譯器選項(xiàng)如字長設(shè)置來大幅改進(jìn)。編譯器也頻繁地更新以利用最新的CPU指令集以及其他優(yōu)化,有時(shí)應(yīng)用程序性能可以通過使用新的編譯器顯著地提高。實(shí)際的診斷過程,運(yùn)維管理人員可以通過仔細(xì)檢查CPU的用量,尋找性能改進(jìn)的空間,去除一些不需要的負(fù)載。
三、物理內(nèi)存
物理內(nèi)存是存儲(chǔ)操作系統(tǒng)內(nèi)核指令和應(yīng)用程序的地方。除了緩存,在很多系統(tǒng)中,這些數(shù)據(jù)的二次存儲(chǔ)的主要存儲(chǔ)設(shè)備是磁盤,磁盤在處理大數(shù)量級數(shù)據(jù)方面的速度遠(yuǎn)低于物理內(nèi)存。一旦物理內(nèi)存被填滿,系統(tǒng)將在內(nèi)存和磁盤之間交換數(shù)據(jù),這個(gè)相對緩慢的過程經(jīng)常成為系統(tǒng)瓶頸,進(jìn)而成為影響程序性能的重要因素。實(shí)際的應(yīng)用程序分析需要檢查影響系統(tǒng)性能的因素包括分配內(nèi)存和釋放內(nèi)存、復(fù)制內(nèi)存和管理內(nèi)存地址空間映射的CPU開銷。對于多處理器架構(gòu)系統(tǒng)來說,內(nèi)存的布局也是一個(gè)影響因素,因?yàn)檫B接到本地CPU的內(nèi)存的延遲時(shí)間比遠(yuǎn)程CPU訪問要低很多。
四、文件系統(tǒng)和磁盤
服務(wù)器數(shù)據(jù)存儲(chǔ)包括邏輯組織和物理實(shí)現(xiàn)兩大部分。邏輯組織即文件系統(tǒng)能夠在各種不同的設(shè)備上組織和存儲(chǔ)信息,協(xié)調(diào)所有的訪問操作,確保操作的高效執(zhí)行且不會(huì)相互干擾,物理實(shí)現(xiàn)即磁盤則是文件系統(tǒng)操作的底層硬件設(shè)備。文件系統(tǒng)使用緩存、緩沖和異步I/O來減輕磁盤延遲對應(yīng)用程序的影響。磁盤是應(yīng)用程序加載的來源,在高負(fù)載下,如果沒有提前規(guī)劃,很容易成為瓶頸,CPU持續(xù)空閑以等待磁盤I/O結(jié)束。發(fā)現(xiàn)并消除這些瓶頸能讓性能和應(yīng)用程序吞吐量明顯提升,可以通過使用動(dòng)態(tài)跟蹤技術(shù),包括操作系統(tǒng)附帶或第三方工具(Dtrace)等,檢查文件系統(tǒng)和磁盤關(guān)鍵指標(biāo)如隨機(jī)連續(xù)比例、讀寫比、命中率、磁盤響應(yīng)時(shí)間等。
五、網(wǎng)絡(luò)資源
隨著應(yīng)用系統(tǒng)訪問人員的快速增長,應(yīng)用程序也向著越來越分布化的方向演化,尤其在云計(jì)算環(huán)境中,網(wǎng)絡(luò)在性能方面扮演著的角色越來越重要。除了改進(jìn)網(wǎng)絡(luò)延時(shí)和吞吐量,另一個(gè)常見的任務(wù)是消除可能由丟包引起的延時(shí)異常。如DNS 域名解析時(shí)間太長可以通過瀏覽器DNS緩存和DNS預(yù)加載解決,TCP每次都要建立三次握手,可以通過TCP長鏈接,預(yù)鏈接等措施處理。HTTP層面的優(yōu)化可以分為 減少HTTP請求提及和 減少HTTP請求次數(shù)等方面優(yōu)化。
工欲善其事,必先利其器。針對應(yīng)用程序性能優(yōu)化,最大的挑戰(zhàn)是性能分析,性能問題在復(fù)雜的軟件中通常由多個(gè)因素造成,而性能分析要求運(yùn)維管理人員深入了解應(yīng)用程序、設(shè)備硬件以及網(wǎng)絡(luò)的性能,明確每個(gè)環(huán)節(jié)執(zhí)行時(shí)間的先后順序,并做出合理的判斷,即真正的任務(wù)不是尋找問題,而是辨別問題或者說是辨別哪些問題是最重要的。只有充分理解系統(tǒng)性能指標(biāo)并找到適當(dāng)?shù)墓ぞ邅矸治隹赡艿钠款i,才能明晰影響系統(tǒng)性能各個(gè)要素,做出合理的判斷,進(jìn)而運(yùn)用系統(tǒng)工程的方法來掌握和調(diào)整。應(yīng)用程序性能優(yōu)化的方案則需要構(gòu)建在操作系統(tǒng)的深刻理解上,甚至構(gòu)建在統(tǒng)計(jì)學(xué)和統(tǒng)計(jì)實(shí)驗(yàn)基礎(chǔ)上。
參考文獻(xiàn):
[1]Brendan Gregg.性能之巔 洞悉系統(tǒng)、企業(yè)與云計(jì)算[M].電子工業(yè)出版社,2015.
[2]譚志彬,柳純錄,周立新,盧光明.信息系統(tǒng)項(xiàng)目管理師教程[M].清華大學(xué)出版社,2017.
作者簡介:夏衛(wèi)虎,男,本科,網(wǎng)絡(luò)工程師,主要研究方向:網(wǎng)絡(luò)、虛擬化、存儲(chǔ)。