Java-壓測以及系統優化手段

第一次面試的時候沒準備好,一下子被問懵了,其實只要大概瞭解下有什麼優化的方向,挑選你比較瞭解的層面,引導面試官去問,或者主動去詳細解釋你比較瞭解的方向。

一、壓測-監控與分析

想要優化系統,首先得找到你的系統瓶頸在哪,這時候我們一般通過壓測,分析系統的瓶頸。

1. 壓測的主要流程

  1. 資源與環境準備:壓測的系統環境要儘可能的保持與生產環境配置一致,如果存在差異,壓測出來的結果可能毫無參考性,並提供額外的服務器部署監控工具
  2. 場景設計與數據準備:分析高併發量的核心業務流程,針對該流程進行數據的準備
  3. 腳本的錄製:針對選用的壓測工具,準備壓測腳本
  4. 壓測的執行:重複進行壓測,並不斷調整系統配置(JVM參數之類的),通過監控工具記錄壓測時的各類數據,包括系統的資源消耗情況,JVM信息,請求鏈路的處理速度等等。注意,壓測的目的是分析瓶頸,應該合理的去設定併發量,而不是一開始就以破壞系統爲目的,去暴力壓測
  5. 壓測結果分析: 針對記錄的壓測數據,分析出系統瓶頸,確定調優的方向

2. 壓測工具介紹

這裏只介紹幾個免費工具,如果想用付費工具,感覺不如直接找專業的壓測服務供應商

工具 說明 優點 缺點
JMeter Apache基於java的壓測工具 支持各類插件,能滿足大部分場景;支持的瀏覽器較多;支持jenkins;用起來簡單,腳本也好寫,新手牆裂推薦 對業務場景的支持比較差,集羣壓力測試時的啓停很麻煩
ngrinder 基於python 部署簡單;節點控制簡單;有比較好看的WEB界面;實現多用戶共享壓測節點資源 似乎很久沒更新,腳本比較難編寫,數據源使用複雜,錄製工具坑多,不是專業的壓測人員請遠離這玩意
AB Apache自帶 體積小,方便發起壓測 功能少到極致,只適合對單個接口進行壓力測試
Gatling 基於Scala 開發的高性能服務器性能測試工具 壓測節點性能非常高;支持Maven,Eclipse,IDEA,Jenkins;開源,且擴展性好 對業務場景的支持比較差,不支持分佈式壓力測試,語言學習升本較高

3. 監控工具

以下工具可以組合一起使用,一般使用zabbix+pinpoint就差不多了

Zabbix

基於WEB界面的提供分佈式系統監視以及網絡監視功能的企業級的開源解決方案。開源免費,支持中文,而且安裝和配置很簡單,學習成本低

主要功能(監控信息):CPU負荷、內存使用、磁盤使用、網絡狀況、端口監視、日誌監視

Pinpoint

Pinpoint是一款全鏈路分析工具,提供了無侵入式的調用鏈監控、方法執行詳情查看、應用狀態信息監控等功能。

提供了調用鏈健康度和調用鏈響應的監控,能監控調用鏈路中,各個方法以及sql執行的耗時

Graylog

Graylog是一個開源的日誌聚合、分析、審計、展現和預警工具。(監控界面的圖表看起來很炫)

主要功能:應用日誌收集,應用日誌監控,接口健康度監控

二、系統優化的手段

通過壓測的結果,我們分析出高併發的情況,系統的瓶頸,針對這些瓶頸,我們可以使用對應的手段去優化系統,這裏只簡單說下優化的考慮方向(以下僅爲我能想到的方向,歡迎大家評論補充完善)

1. 增加硬件配置

在當前硬件性能逐漸增長的背景下,最最簡單粗暴的方式:

  • 服務帶寬不夠:增加網絡帶寬,DNS域名解析分發多臺服務器
  • web線程連接數不夠:負載均衡,前置代理服務器nginx、apache,微服務集羣等
  • 數據庫連接查詢上不去:數據庫查詢優化,讀寫分離,分表等
  • 系統整體壓力過大:集羣、負載均衡

2. 程序設計層面進行優化

  • 合理使用緩存,包括用戶緩存,信息緩存等,多花點內存來做緩存,可以大量減少與數據庫的交互,提高性能
  • 分析功能的必要性,爲核心功能讓位(類似微服務的服務降級思想?):例如統計的功能儘量做緩存,或按每天一統計或定時統計相關報表,避免在系統高負荷階段使用
  • 能使用靜態頁面的地方儘量使用,減少容器的解析,儘量將動態內容生成靜態html來顯示
  • 允許的情況下,合理使用隊列來緩解核心接口的壓力,保證系統的穩定運行

3. 代碼優化

pinpoint監控耗時請求,定位耗時方法並進行代碼review,對代碼結構進行優化,一般主要針對高頻的核心業務代碼

4. JVM參數調優

壓測過程中,監控GC情況, 對各種系統參數配置進行調整,找出最優配置

5. 數據庫優化

  • sql優化:pinpoint定位耗時請求,針對出現頻率高的sql以及耗時高的sql進行優化
  • 數據庫的表結構優化:合理建立索引,調整表結構
  • 數據庫配置調優(本人沒了解過,都是圍觀DBA大佬操作)

剩下的還有操作系統優化,系統架構優化(重構)等…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章