性能測試調優經驗總結

原創 Bruce 天馬行空布魯斯 2018-06-27
以前作過一些性能測試及調優相關的工做,也參加過相關的一些培訓,想寫一篇文章記錄用過的一些工具和一些經驗總結。html

性能測試及調優對於一個大型系統有着即爲重要的意義,你們可能都對每一年雙十一對阿里淘寶天貓的性能感到很驚歎,其實網上也有不少關於各類高併發網站的架構的介紹,有興趣的同窗能夠上網查看。這裏主要介紹一些性能測試工具以及我的對性能調優的一些總結。java

性能測試調優經驗總結

咱們在討論性能的時候,其實每每須要指定一個量化的標準來衡量,一般叫作KPI,好比常見的平均一個request的返回時間,打開一個頁面的平均等待時間,等等。經過對照性能測試結果和定義的KPI,纔好決定調優的方向。數據庫

下面介紹一些用過的性能測試相關的工具:緩存

jdk bin: jdk的bin目錄下有不少16k大小的可執行文件,其中不少都是能夠用做監控java進程的工具,好比jps,若是本地起了不少java進程,當經過任務管理器不知道哪一個java進程是哪一個的時候,能夠經過jps命令查看detail信息,jmap,經過jmap能夠作heap dump分析是否有內存溢出,jstack,經過jstack能夠作thread dump分析死鎖問題。網絡

//bin目錄圖片,附解釋架構

性能測試調優經驗總結

jconsole/jvisualvm: 這兩個工具起初是開源項目,如今也集成到了jdk bin目錄下,它們提供了一個圖形化的界面監控java進程,包括本地進程和遠程進程。經過這兩個工具,能夠對java內存模型有一個直觀的認識。併發

//內存模型圖異步

性能測試調優經驗總結

gatling: 這是一個基於scalar的性能測試工具,簡單講,這個工具主要用做對backend service模擬高併發的訪問的場景,而且會有一個比較豐富詳細的report。這個工具備一個standalone的GUI工具,能夠生成基於scalar的測試案例腳本,對scalar有經驗的同窗也能夠不依賴這個工具而手動寫測試案例,一般,GUI工具備利於本地快速測試,而測試腳本每每用於自動化的持續集成環境。https://gatling.io/分佈式

jmeter: jmeter是一個使用很是普遍的開源項目,網上有不少相關的資料,這裏不在贅述。這裏想介紹一個tool taurus,一般原生jmeter生成的report比較醜而且對持續集成支持的不是很好,taurus就是這樣一個封裝了jmeter的工具。http://gettaurus.org/ide

jprofiler: 用上述工具作性能測試每每獲得的是backend整體上的性能表現,好比說平均一個request的返回時間,那麼對於backend處理這個request的邏輯每一個方法具體執行的時間,對於開發人員調優代碼有重要的意義,jprofier就可以達到這個目的。https://www.ej-technologies.com/products/jprofiler/overview.html

性能測試調優經驗總結

dynatrace: dynatrace能夠監控應用程序從high level到detail方法執行時間級別的性能表現,相比jprofiler,dynatrace很適合對cloud應用的監控。https://www.dynatrace.com/

下面記錄我的對性能調優的一些感悟:

數據庫層

  • 建立有效的索引

  • 數據庫鏈接池配置
  • Application層

  • 處理request請求的鏈接池配置

減小網絡傳輸的時間

  • 配置CDN

  • 壓縮js文件

  • 減小靜態文件,好比合並多張圖片成一張

  • 採起有效的緩存策略

  • 減小發送請求的次數

  • 異步

分佈式

  • 單機系統的計算能力有限,採用分佈式系統能夠大大提升計算能力。我的認爲這也是paas平臺相較於iaas平臺的一個很重要的功能,在paas平臺上,load balance是一個開箱即用的功能。

代碼邏輯實現

  • 其實以上都是一些配置,架構相關的優化,還有一個最重要的點就是代碼實現邏輯的優化,真正減小時間複雜度。
相關文章
相關標籤/搜索