談到軟件產(chǎn)品的性能調(diào)優(yōu),我認為可以從狹義和廣義兩個范圍來理解。從狹義的范疇來看,性能調(diào)優(yōu)主要是指通過修改軟件程序邏輯、結(jié)構(gòu)等技術(shù)手段提升軟件產(chǎn)品的各項性能指標,如響應(yīng)時間等等;而從廣義的層面來看,就不僅限于程序內(nèi)部了,因為造成系統(tǒng)性能問題的瓶頸很可能來源于方方面面,而這種情況往往是性能調(diào)優(yōu)很普遍的情況,下面就從廣義的范圍細分成幾個角度來進行闡述。
一、軟件層面
a)首先要談到的肯定是我們自己提供的軟件產(chǎn)品,因為它的內(nèi)部設(shè)計是我們最清楚的,用戶在應(yīng)用時遇到性能問題首先要質(zhì)疑的也是我們的產(chǎn)品,因此這個層面的調(diào)優(yōu)肯定是我們軟件供應(yīng)者的重中之重!舉例來說:比較復(fù)雜的業(yè)務(wù),通常會在程序中輸出一些關(guān)鍵操作的執(zhí)行時間,然后再分析哪些操作比較耗時,之后再找原因。具體分析原因就比較多了,比如多次循環(huán)查詢數(shù)據(jù)庫,復(fù)雜耗時的SQL語句,頻繁的遠程調(diào)用,復(fù)雜算法,等等。
b)數(shù)據(jù)庫層面:設(shè)計數(shù)據(jù)庫時應(yīng)考慮到在少訪問和簡化、優(yōu)化訪問的前提下實現(xiàn)產(chǎn)品功能,多用存儲過程代替完整SQL,盡量用連接池使用戶和服務(wù)的連接實現(xiàn)可復(fù)用,盡量不使用游標結(jié)構(gòu)等,對基本表的設(shè)計進行優(yōu)化如第三范式、引入“中間表”的技術(shù)思路,控制用戶實際數(shù)據(jù)量的增長;對數(shù)據(jù)庫進行索引優(yōu)化,避免整表掃描;對數(shù)據(jù)庫的事務(wù)處理進行調(diào)優(yōu)(去除不必要的鎖、將事務(wù)切分成小的粒度、適當(dāng)降低隔離級別、減少訪問熱點等);SQL語句調(diào)優(yōu)(盡量優(yōu)化那些無意義的、拙劣的、復(fù)雜的SQL)等等。這方面主要就是本著一個通過盡可能少的磁盤訪問而獲得所需要的數(shù)據(jù)這么一個基本原則。
c)中間件軟件:某些軟件產(chǎn)品為數(shù)據(jù)庫、中間件、客戶端的三層架構(gòu)設(shè)計,此時為系統(tǒng)運行提供服務(wù)的中間件軟件也將成為制約性能的一個瓶頸。因此在這個層面上也是有很大調(diào)優(yōu)空間的,比如各種相關(guān)參數(shù)的設(shè)置優(yōu)化,使用性能包、性能監(jiān)控分析工具等,避免競爭線程資源,批處理,堆大小的設(shè)置,為溢出條件設(shè)置執(zhí)行隊列,后備緩沖,減少非重要應(yīng)用的資源占用,使用集群等。舉個簡單的實例,我曾經(jīng)遇到一個產(chǎn)品的性能問題,當(dāng)查詢數(shù)據(jù)大到一定程度時,系統(tǒng)一直灰屏死機狀態(tài),結(jié)果只是通過把JVM內(nèi)存參數(shù)設(shè)置從默認值的128調(diào)為256就輕松解決了,只是參數(shù)值的一個小變動,反映到具體的用戶面前就是出的來和出不來數(shù)據(jù)的本質(zhì)差別!
d)操作系統(tǒng):無論是服務(wù)器還是用戶終端,都脫離不了操作系統(tǒng)這個基礎(chǔ)的應(yīng)用平臺的支持,因此這個層面的性能調(diào)優(yōu)工作也千萬不能遺漏。例如同廠商的不同版本(如WINDOWS各系列)、不同廠商(MS/HP/SUN等)不同的操作系統(tǒng)(WINDOWS/LINUX/UNIX等),這些操作系統(tǒng)的性能表現(xiàn)本身就有所差異,如內(nèi)存的分配、虛擬內(nèi)存的處理、數(shù)據(jù)的讀寫交換、兼容穩(wěn)定抗壓性等等方面,利用相應(yīng)的調(diào)優(yōu)方法和工具,可以對此環(huán)節(jié)進行優(yōu)化。
二、硬件層面
a)CPU:中央處理器,決定數(shù)據(jù)處理速度的核心部件,與性能表現(xiàn)的相關(guān)度可想而知,硬件方面具體調(diào)優(yōu)方法及工具本文中不再贅述,下同!
b)內(nèi)存、緩存:數(shù)據(jù)交換的臨時存儲空間,它的大小形象的說就像是火車站候車室的面積,與性能的關(guān)系可想而知。比如有些程序設(shè)計的操作對內(nèi)存回收設(shè)計有漏洞,導(dǎo)致頻繁操作時內(nèi)存泄漏越來越多,系統(tǒng)就會越來越慢。
c)硬盤、I/O:數(shù)據(jù)存儲、調(diào)用的載體,如果存儲器像候車室,那這些就像是車箱的大小與節(jié)數(shù)等。
d)網(wǎng)絡(luò):如果還是用坐火車為例,網(wǎng)絡(luò)的差別就像是普通、快速、動車、磁浮等各種等級的差別,如果一個“系統(tǒng)”頻繁需要通過火運完成,那它的性能表現(xiàn)和網(wǎng)絡(luò)的相關(guān)性就不言而喻了。比如某些軟件功能設(shè)計時沒有考慮網(wǎng)絡(luò)流量方面的風(fēng)險,導(dǎo)致每次操作時網(wǎng)絡(luò)連接次數(shù)很多,頻繁調(diào)用或是數(shù)據(jù)包過大,這些都會導(dǎo)致在一定網(wǎng)絡(luò)條件下產(chǎn)生性能問題。
e)顯卡等特殊硬件:不同軟件產(chǎn)品應(yīng)用的業(yè)務(wù)可能用到不同的專用硬件或外設(shè),比如一個很炫的游戲?qū)︼@卡的要求就會很高,當(dāng)顯示成為短板時死機、跳幀等異常;一個收款臺的掃描、信用卡POS機如果質(zhì)量或兼容性、穩(wěn)定性不佳時,也可能會造成性能表現(xiàn)的不理想,等待諸如此類問題。
三、業(yè)務(wù)層面
a)業(yè)務(wù)流程重組:項目甲方在購買軟件產(chǎn)品或系統(tǒng)服務(wù)前,一般會找相關(guān)專家、售前人員作一些相關(guān)的評估或“體檢”,找出現(xiàn)有運作模式下的一些存在優(yōu)化空間的錯誤環(huán)節(jié)或繁冗流程、制度體系等。因此在這個階段是否對項目應(yīng)用方作了足夠的優(yōu)化,也對未來產(chǎn)品上線后的應(yīng)用性能表現(xiàn)在宏觀上起著決定作用。取例來說:如果一個系統(tǒng)設(shè)計前沒有作過這方面的優(yōu)化,最后應(yīng)用時需要100人操作10個步驟才能完成,通過流程重組后,從業(yè)務(wù)上只需要40個人干5個步驟就搞定了,那么沒上軟件前我們就能從理論上把性能表現(xiàn)優(yōu)化80%!
b)需求定位:與上一條闡述的類似,只是介入的階段和角色有所區(qū)別。需求人員有時是從項目乙方發(fā)起的,主動地、有策略性的去選擇一些有代表性的單位去調(diào)研軟件產(chǎn)品的概要或詳細需求,為后續(xù)的產(chǎn)品開發(fā)設(shè)計提供依據(jù)。在這一階段是否有效的考慮了未來產(chǎn)品的性能表現(xiàn),對其提出相關(guān)的設(shè)計目標,也對后續(xù)的性能表現(xiàn)有一定的影響。
c)實施方案:一般當(dāng)大型一些的項目合同簽訂完畢后,就會分期安排實施人員負現(xiàn)場牽頭并組織雙方成立實施小組團隊,共同制訂系統(tǒng)的上線、操作培訓(xùn)、應(yīng)用方案等,并執(zhí)行方案直至系統(tǒng)正常上線運行,項目交付。因此,這個方案制定的是否精簡、高效,也直接關(guān)系了用戶應(yīng)用系統(tǒng)的性能表現(xiàn)。
四、意識層面
當(dāng)今社會萬事講求以人為本,如果從軟件應(yīng)用系統(tǒng)涉及的各級人員角色的內(nèi)心沒有把性能表現(xiàn)當(dāng)回事,那么一切調(diào)優(yōu)最多也都是亡羊補牢而已。比如:
a)產(chǎn)品經(jīng)理:項目乙方產(chǎn)品總負責(zé)人,產(chǎn)品目標、市場定位、基本框架的制定者。
b)一線人員:售前咨詢、實施顧問等。
c)需求設(shè)計:對產(chǎn)品具體功能設(shè)計提出明確要求的角色。
d)代碼實現(xiàn):按需求定義進行產(chǎn)品的具體實現(xiàn)的角色。
e)測試人員:對產(chǎn)品質(zhì)量進行檢測、對開發(fā)過程進行監(jiān)管的角色。
f)最終用戶:系統(tǒng)最終的使用者、應(yīng)用效果的影響者。
對于一個軟件產(chǎn)品來講,只有以上這些環(huán)節(jié)的角色人等在各自的工作崗位上,真正的在意識層面上提高優(yōu)化系統(tǒng)性能的地位,而不是把它作為功能優(yōu)先實現(xiàn)之外的附屬品,才能把系統(tǒng)性能優(yōu)化的工作最大程度的作在前面、作的全面、作得到位!
綜上所述,我們看到了各類導(dǎo)致性能瓶頸的可能原因(也可以說是性能調(diào)優(yōu)的入手點),下面我們用一個比較常用的魚骨圖分析法來展示一下,可能會更為清晰:
然后我們再把這些原因按一定的規(guī)則進行分門別類,一般采用如下的二維矩陣分析的方法,按可推行的難易度和收效的影響度高低來形成四個象限,把這些問題按具體情況分布在這四個象限中,看到這些問題中哪些是我們要優(yōu)先解決的,哪些是可以暫時放一放的,調(diào)優(yōu)時可以借鑒這個順序來進行。

當(dāng)然在不同的企業(yè)這四個象限中的原因分布是會相互轉(zhuǎn)化的,比如在一個預(yù)算有限的私企中可能額外的硬件投資對其來說就是應(yīng)該放入暫時擱置的象限,而對于財大氣粗的單位中可能費用預(yù)算不是問題但是想改變他的辦事流程和組織架構(gòu)將是非常困難的,這時解決的優(yōu)先次序也就要相應(yīng)調(diào)整了。