我的Web職業(yè)生涯中的大部分時(shí)間都是擔(dān)任看護(hù)老人軟件后端工程師。因此,我一直很忠實(shí)地實(shí)現(xiàn)性能設(shè)計(jì)、進(jìn)行正規(guī)的后端優(yōu)化——編譯器選項(xiàng)、數(shù)據(jù)庫(kù)索引和內(nèi)存管理等。很多書都關(guān)注如何在這些領(lǐng)域中進(jìn)行優(yōu)化,在尋求改進(jìn)的時(shí)候,大量的時(shí)間也都花在這些地方。事實(shí)上,只有10%~20%的最終用戶響應(yīng)時(shí)間是花在從Web服務(wù)器獲取HTML文檔并傳送到瀏覽器中的。如果希望能夠有效地減少頁(yè)面的響應(yīng)時(shí)間,就必須關(guān)注剩余80%~90%的最終用戶體驗(yàn)。
Steve Souders在High Performance Web Site一書中給出了14條規(guī)則,老實(shí)說(shuō),這些規(guī)則非常簡(jiǎn)潔有效。根據(jù)這些規(guī)則,我們嘗試壓縮頁(yè)面的大小、充分利用瀏覽器的緩存、合理布局CSS和JavaScript腳本等。有興趣的讀者可以去閱讀那本書。
這些簡(jiǎn)潔有效的規(guī)則是看護(hù)老人軟件設(shè)計(jì)和實(shí)現(xiàn)中無(wú)法采用的嗎?不。
一段時(shí)間之后,終于結(jié)束了單用戶下的性能測(cè)試、分析和優(yōu)化工作。所有頁(yè)面的響應(yīng)時(shí)間都已經(jīng)降到了3s以下。但是,我們也許還不到舉杯歡慶的時(shí)候。要知道,在真實(shí)的業(yè)務(wù)場(chǎng)景中,不會(huì)只有一個(gè)人在使用看護(hù)老人軟件系統(tǒng)。所以,性能測(cè)試和調(diào)優(yōu)的工作幾乎才剛剛開(kāi)始。
致遠(yuǎn)服軟認(rèn)為:http://www.soft8.com.cn/開(kāi)始為多用戶并發(fā)下的性能測(cè)試和分析做準(zhǔn)備。準(zhǔn)備什么呢?首先,需要準(zhǔn)備自動(dòng)化的測(cè)試和分析工具,我們選擇LoadRunner作為多用戶并發(fā)模擬工具,Yourkit作為CPU和內(nèi)存監(jiān)控工具,另外,JConsole在觀察JVM運(yùn)行狀況時(shí)也很有效。其次,需要考慮在多用戶并發(fā)下進(jìn)行性能分析的方法。
為什么要關(guān)注這些點(diǎn)?我想先嘗試給出一些解釋。老實(shí)說(shuō),流量訪問(wèn)統(tǒng)計(jì)系統(tǒng)限于經(jīng)驗(yàn)知識(shí)的不足,這些解釋包含了很多猜測(cè)的成分。盡管如此,我們也需要解釋。當(dāng)前的解釋可能是錯(cuò)誤的,但正確的思考和工作方式可以幫助我們?cè)趯?lái)的某個(gè)時(shí)候獲得比較接近正確的解釋。不過(guò),要精確地解釋性能問(wèn)題,的確是一件非常困難的事情。
CPU的使用狀況是通過(guò)CPU的使用率來(lái)反映的。如果我們想充分利用CPU的計(jì)算能力,唯一的辦法就是讓CPU不間斷地工作,也就是說(shuō),100%的使用率是最理想的。但實(shí)際上不可能做到,因?yàn)椴僮飨到y(tǒng)的調(diào)度和各種服務(wù)進(jìn)程都需要占用CPU資源。那么,如果拋開(kāi)CPU資源異常使用(例如,長(zhǎng)時(shí)間的循環(huán)操作)的情況,追求盡可能高的CPU使用率是不是正確的想法呢?也不一定,因?yàn)檫@種追求可能使CPU無(wú)法適應(yīng)負(fù)載的波動(dòng)。