我們不得不開始關(guān)注并行計算的問題。在這個多核的時代,并行計算是個讓人感到無比興奮的話題。但是,很少有大連網(wǎng)絡(luò)流量監(jiān)控軟件開發(fā)組織對此進(jìn)行良好的規(guī)劃和設(shè)計。在我們這個實例中,也是同樣如此。
例如:有一些非線程安全的類被定義成了靜態(tài)對象,這大大增加了線程死鎖的幾率;而另一些程序則通過濫用同步方法來克服對于死鎖的恐懼,這導(dǎo)致性能大幅度降低。對并發(fā)計算有興趣的讀者,可以去閱讀Brian Goetz寫的Java Concurrency in Practice。
在這個實例的優(yōu)化過程中,我們只使用了兩個簡單的方法,但效果還可以:盡量使用同步塊而不是同步方法;不需要加同步鎖的地方不要加。并行計算問題是大連網(wǎng)絡(luò)流量監(jiān)控軟件設(shè)計和實現(xiàn)中無法解決的嗎?不。
接著,我們開始關(guān)注網(wǎng)絡(luò)流量。在單用戶模式下,我們已經(jīng)采用了一些頁面壓縮的方式來降低網(wǎng)絡(luò)流量。事實上,腳本也可以進(jìn)行壓縮。例如,采用更簡短的函數(shù)名、變量名。但更重要的是,頁面本身也需要進(jìn)一步簡化。很顯然,這種簡化應(yīng)該在軟件設(shè)計和實現(xiàn)的時候進(jìn)行。
數(shù)據(jù)庫負(fù)載是另一個需要關(guān)注的話題。在我們的實例中,數(shù)據(jù)庫負(fù)載比較輕。有興趣的讀者可以去閱讀相關(guān)的參考資料。致遠(yuǎn)服軟:http://www.soft8.com.cn/WebSphere本身配置的優(yōu)化也是值得關(guān)注的。例如,類的最大載入數(shù)量、線程池大小、連接池大小等。這里就不再一一描述。事實上,在多用戶下的性能分析和單用戶下有很大的區(qū)別。在單用戶下,很多性能問題可以比較精確地定位;而在多用戶下,完全是個綜合性的推理和分析的過程。
我們嘗試整理大連網(wǎng)絡(luò)流量監(jiān)控軟件在不同階段和場景下對系統(tǒng)進(jìn)行性能測試和調(diào)優(yōu)的思路,這一定會對將來的工作有幫助。
最后,讓我們來回顧一下前面的性能測試和調(diào)優(yōu)過程,并用一句話來概括,那就是:保持一個簡單的思路,注意經(jīng)驗知識的積累,不斷地在解釋中提高認(rèn)識。
在上一節(jié)的最后,我用一句話概括了看護(hù)老人軟件性能測試和性能調(diào)優(yōu)的過程——保持一個簡單的思路,注意經(jīng)驗知識的積累,不斷地在解釋中提高認(rèn)識。我想很少有人會去挑戰(zhàn)一些原則性的概括,然而,很多人卻會對原則的實際作用表示懷疑。原因很簡單,人們都相信自己在實踐中獲取的經(jīng)驗知識,而人們對于事物的認(rèn)識層次存在著差異。