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