原創 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層
減小網絡傳輸的時間
配置CDN
壓縮js文件
減小靜態文件,好比合並多張圖片成一張
採起有效的緩存策略
減小發送請求的次數
分佈式
代碼邏輯實現