前面看到有人講j2ee的性能調優,雖然這塊不是自己的專長,但是豬養多了,也忍不住跳出來說幾句。
雖然幾乎每本講性能調優的書籍開篇都會提,沒必要的情況下就不要做調優,但是我個人還是認為,所有系統在上線前,都應該做一次基本的壓力測試并對相關的性能問題進行檢測,但是迫于資源壓力,很多項目都無法做正規的壓力測試,一直到系統上線出現問題,才倒回來找原因。而正規的壓力測試,往往因為需要嚴格模擬生產環境,需要耗費大量的資源,各類專家配合解決問題,并不是那么輕松的可以做下來的。
而j2ee應用的特點就是以復雜性來回避傳統問題,所以任意一個j2ee的部署,相對于php那樣的結構都是比較復雜的。系統一旦發生性能問題,必須在程序、數據庫、應用服務器、jvm、操作系統幾大塊中交叉進行考慮,根據實際情況問題,問題的原因可能異常復雜。我們可以想象一個項目,從來不做UT不做IT,只做一次UAT,然后直接提交給用戶上線以后,修補錯誤的困難度和成本。
經?吹揭恍┱{優的最后解決方案,可以肯定,幾乎80%以上都是一些低級的程序錯誤導致的,剩下的20%雖然可能是用硬件,os參數調整等等問題解決了,但是其中很大一塊,歸根到底也是程序的問題。而在我們回顧這些錯誤的時候可以很驚人的發現,大部分都是一些低級錯誤。
我提倡使用最小化資源的方式做一次壓力測試,排除大部分淺顯的應用問題。最小資源的意思,即在pc環境,使用應用可以運行的最小資源狀態下,進行壓力測試和性能問題偵測的工作。這種做法的優點如下。
1. 環境容易搭建, 特別是不需要考慮大型硬件和網絡條件等等,也回避了開發人員可能不熟悉unix和特定應用服務器等問題
2. 不需要特別的數據庫,操作系統和應用服務器專家配合,開發人員自身即可完成。
3. 不需要特別的依賴os和應用服務器,jvm的監測工具。選擇自己最熟悉的即可。
4. 開發人員在熟悉這種過程以后,再轉到正式的生產環境工作時也更有經驗,更容易解決問題。
對測試過程做一點簡單介紹。
工具準備:
得益于開源技術的發展,大部分工具都可以免費獲得,使用也比較簡單。
1. jvm 監控: 對jvm的運行狀態進行分析,可以使用jvm自身帶的特性輸出日志,結合hp的jmeterprofile進行分析。也可以使用jrockit自帶的圖形化工具messioncontrol。
熟悉什么用什么,越簡單越好,目的主要是觀察內存堆的變化,線程資源變化,gc情況等。
2. 數據庫監控工具:熟悉數據庫的使用數據庫自身的特性,不熟悉的可以使用第三方工具,主要目的是觀察數據庫的鎖,連接數信息,對于db2我比較喜歡使用questcentral。 oracle使用OEM或者自身的數據字典已經可以。
3. 應用服務器監控:主要目的是記錄方法的調用情況和執行時間,找出頻繁調用的方法和執行時間過長的方法。使用jprobe和jprofile都可以很輕松的做到。如果使用的應用服務器比較偏門,那么可以換一個支持這種檢測工具的應用服務器。反正主要目的只是在找問題。
4. sql執行監控:跟蹤找出執行時間過長的sql。 我喜歡使用p6spy。
5. 壓力工具: jmeter+badboy ,有條件的可以用loadrunner,和loadrunner近似的還有一個免費的開源產品。 另外web應用的話,也可以使用selenium這樣的ff擴展來做。微軟vs自帶的也不錯,反正是什么簡單用什么。
文章來源于領測軟件測試網 http://www.kjueaiud.com/