性能測試監控指標及分析調優指南

来源:https://www.cnblogs.com/88223100/archive/2023/07/21/Performance-testing-monitoring-indicators-and-analysis-tuning-guide.html
-Advertisement-
Play Games

一、哪些因素會成為系統的瓶頸 CPU:如果存在大量的計算,他們會長時間不間斷的占用CPU資源,導致其他資源無法爭奪到CPU而響應緩慢,從而帶來系統性能問題,例如頻繁的FullGC,以及多線程造成的上下文頻繁的切換,都會導致CPU繁忙,一般情況下CPU使用率<75%比較合適。 記憶體:Java記憶體一般是 ...


 

一、哪些因素會成為系統的瓶頸

 

  • CPU:如果存在大量的計算,他們會長時間不間斷的占用CPU資源,導致其他資源無法爭奪到CPU而響應緩慢,從而帶來系統性能問題,例如頻繁的FullGC,以及多線程造成的上下文頻繁的切換,都會導致CPU繁忙,一般情況下CPU使用率<75%比較合適。

     

  • 記憶體:Java記憶體一般是通過jvm記憶體進行分配的,主要是用jvm中堆記憶體來存儲Java創建的對象。記憶體的讀寫速度非常快,但是記憶體空間又是有限的,當記憶體空間被占滿,對象無法回收時,就會導致記憶體溢出或記憶體泄漏。

     

  • 磁碟I/O:磁碟的存儲空間要比記憶體存儲空間大很多,但是磁碟的讀寫速度比記憶體慢,雖然現在引入SSD固態硬碟,但是還是無法跟記憶體速度相比。

     

  • 網路:帶寬的大小,會對傳輸數據有很大影響,當併發量增加時,網路很容易就會成為瓶頸。

     

  • 異常:Java程式,拋出異常,要對異常進行捕獲,這個過程要消耗性能,如果在高併發的情況下,持續進行異常處理,系統的性能會受影響。

     

  • 資料庫:資料庫的操作一般涉及磁碟I/O的讀寫,大量的資料庫讀寫操作,會導致磁碟I/O性能瓶頸,進而導致資料庫操作延遲。

 

當在併發編程的時候,經常會用多線程操作同一個資源,這個時候為了保證數據的原子性,就要使用到鎖,鎖的使用會帶來上下文切換,從而帶來性能開銷,在JDK1.6之後新增了偏向鎖、自旋鎖、輕量級鎖、鎖粗化、鎖消除。

 

二、哪些指標做為衡量系統的性能

 

1.RT響應時間

 

  • 資料庫響應時間,即資料庫操作的時間

  • 服務端響應時間,服務端包括Nginx分發的請求所消耗的時間及服務端程式執行所消耗的時間。

  • 網路響應時間,網路傳輸,網路硬體需要對傳輸的請求進行解析所消耗的時間

  • 客戶端響應時間,一般Web、App客戶端,消耗時間可以忽略不計,但是如果客戶端存在大量的邏輯處理,消耗的時間有能能就會變長。

 

2.TPS吞吐量

 

  • 磁碟吞吐量:IOPS(Input/Output Per Second)每秒的輸入輸出量,這種是單位時間內系統能處理的I/O請求數量,I/O請求通常為讀或寫數據操作請求,關註隨機讀寫性能,適用於隨機讀寫頻繁的應用,如小文件存儲,郵件伺服器。數據吞吐量,這種是單位時間可以傳輸的數據量,對於大量順序讀寫頻繁的應用,傳輸大量連續數據,例如視頻編輯。

 

  • 網路吞吐量:指網路傳輸時沒有丟幀的情況下,設備能夠接受的最大數據速率。網路吞吐量不僅跟帶寬有關係,還跟CPU處理能力、網卡、防火牆、以及I/O等緊密聯繫,吞吐量的大小由網卡的處理能力、內部程式演算法以及帶寬大小決定。

 

3.資源使用率

 

  • CPU使用率,首先可以先瞭解CPU的基本信息,包括物理CPU的個數、單個CPU的核數,然後可以通過命令查看使用率,vmstat、mpstat、top

  • 記憶體使用率,free -m、vmstat、top

  • 磁碟I/O, iostat、 iotop

  • 網路I/O,netstat、ifconfig、tcpstat

 

三、性能測試註意的問題

 

我們在做性能測試的時候,系統的運行會越來越快,後面的訪問速度比我們第一次訪問的速度快了好幾倍,這是因為Java語言編譯的順序是,.java文件先編譯為.class文件,然後通過解釋器將.class的位元組碼轉換成本地機器碼後,才能運行。

 

為了節約記憶體和執行效率,代碼最初被執行時,解釋器會率先解釋執行這段代碼。隨著代碼被執行的次數增多,虛擬機發現某個方法或代碼運行的特別頻繁,就被認定為熱點代碼(Hot Spot Code)。

 

為了提高熱點代碼的執行效率,在運行時虛擬機將會通過即時編譯器(JIT)把這些代碼編譯成為本地平臺相關的機器碼,然後儲存在記憶體中,之後每次運行代碼時,直接從記憶體中獲取。這樣就會導致第一次系統運行慢,後面訪問的速度快幾倍。

 

在做性能測試的時候,每次測試處理的數據集都是一樣的,但是結果卻有差異,這是因為測試時,伴隨著很多不穩定因素,比如機器其他進程的影響、網路波動以及每個階段JVM垃圾回收的不同等。我們可以通過多次測試,將測試結果求平均,只要保證平均值在合理範圍之內,並且波動不是很大,這種情況,性能測試就算通過。

 

四、定位性能問題的時候,可以使用自下而上的策略分析排查

 

當我們進行壓測之後,我們會輸出一份性能測試報告,其中包括,RT、TPS、TP99,被壓伺服器的CPU、記憶體、I/O,以及JVM的GC頻率。通過這些指標可以發現性能瓶頸,我們可以採用自下而上的方式進行分析。

 

1. 首先從操作系統層面,查看系統的CPU、記憶體、I/O、網路的使用率是否異常,再通過命令查找異常日誌,最後通過日誌分析,找到導致瓶頸的問原因。

 

2. 還可以從Java應用的JVM層面,查看JVM的垃圾回收頻率以及記憶體分配情況是否存在異常,分析垃圾回收日誌,找到導致瓶頸的原因。

 

3. 如果系統和JVM層面都沒有出現異常情況,然後可以從應用服務業務層查看是否存在性能瓶頸,例如,Java編程問題,讀寫資料庫瓶頸等。

 

五、優化性能問題的時候,可以使用自上而下的策略進行優化

 

整體的調優順序,我們可以從業務調優到編程調優,最後再到系統調優。

 

1.應用層調優

 

首先是優化代碼,代碼問題往往會因為消耗系統資源而暴漏出來,例如代碼導致記憶體溢出,使JVM記憶體用完,而發生頻繁的FullGC,導致CPU偏高。

 

其次是優化設計,主要是優化業務層和中間件層代碼,例如可以採用代理模式,放在頻繁調用的創建對象的場景里,共用一個創建對象,減少創建對象的消耗。

 

再次是優化演算法,選擇合適的演算法降低時間複雜度。

 

2.中間件調優:MySQL調優

 

1)表結構與索引優化

 

主要是對資料庫設計、表結構設計以及索引設置維度進行的優化,設計表結構的時候,考慮資料庫的水平與垂直的拓展能力,提前規劃好將來數據量、讀寫量的增長,規劃好分庫分表方案。對欄位選擇合適的數據類型,優先選用較小的數據結構。

 

2)SQL語句優化

 

主要是對SQL語句進行的優化,使用explain來查看執行計劃,來查看是否使用了索引,使用了哪些索引。也可以使用Profile命令分析語句執行過程中各個分步的耗時。

 

3)MySQL參數優化

 

主要是對MySQL服務的配置進行優化,例如連接數的管理,對索引緩存、查詢緩存、排序緩存等各種緩存大小進行優化

 

4)硬體及系統配置

 

對硬體設備和操作系統設置進行優化,例如調整操作系統參數、禁用swap、增加記憶體、升級固態硬碟。

 

3.系統調優

 

首先是操作系統調優,Linux操作的內核參數設置可以進行調優,已達到提供高性能的目的。

 

其次,JVM調優,設置合理的JVM記憶體空間,以及垃圾回收演算法來提高性能,例如,如果業務邏輯會創建大對象,我們就可以設置,將大的對象直接放到老年代中,這樣可以減少年輕代頻發發生YongGC,減少CPU的占用時間。

 

4.調優的策略

 

首先是時間換取空間,有的時候系統對查詢速度要求不高,對存儲空間要求較高,這個時候我們可以考慮用時間換取空間。

 

其次是空間換取時間,用存儲空間提升訪問速度,典型的就是MySQL的分庫分表策略,MySQL表單數據存儲千萬以上的時候,讀寫性能就會下降,這個時候我們可以將數據進行拆分,以達到查詢的時候,每個表的數據是少量的,以達到提升性能的目的。

 

5.兜底策略

 

系統調優後,仍然還會存在性能問題,這個時候我們需要有兜底策略, 首先是限流,對系統的入口設置最大訪問限制,同時採取斷熔措施,返回沒有成功的請求。其次是橫向擴容,當訪問量超過某一個閾值時,系統可以自動橫向增加服務。

 

作者丨牛金亮

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/Performance-testing-monitoring-indicators-and-analysis-tuning-guide.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ### 描述 asp.net Core Identity提供給我們一組工具包和API,能幫助我們應用程式創建授權和認證功能。也可以用它創建賬戶並使用用戶名和密碼進行登錄,同時也提供了角色和角色管理功能。 #### 1.創建項目 - 配置項 - nuget包 - Microsoft.AspNetCor ...
  • # shell腳本-DOS攻擊防範(自動屏蔽攻擊IP) ## 原理: #### **找出異常ip** > 通過獲取伺服器access.log日誌信息,獲取時間在每分鐘之內每個ip訪問的次數來判斷此ip是否是DOS攻擊。 > > grep $(date +%d/%b/%Y:%H:%M) 過濾得到沒分鐘 ...
  • **註:** Silverlight工作流控制項,如果在網頁中打不開,則要判斷是否缺少`Silverlight工作流控制項`的插件程式,如果不是則可以進行一下步驟檢查,如果是以下原因則是:由於IIS版本問題,安裝後可能出現不支持wcf服務的請求處理,需要手動添加處理程式;資料庫客戶端如果是64位,需要修 ...
  • 今天給大家分享一下STM32 流水燈簡單的模擬吧,我感覺這個提供有用的,但是自己也是第一次使用,主要是感覺曲線很高級。在PWM中查看脈寬很有用。 code: led.c #include "led.h"#include "delay.h"/*GPIO的控制寄存器的配置1、配置輸出引腳2、打開對應的輸 ...
  • # clion申請教育認證 ## 1、註冊jetbrains賬號 [jetbrains註冊賬號網站鏈接](https://account.jetbrains.com/login) ![picture 1](https://img2023.cnblogs.com/blog/2915785/202307 ...
  • 一、多表關係 一對多或者多對一 案例:部門與員工的關係 關係:一個部門對應多個員工,一個員工對應一個部門(不考慮跨部門的特殊情況) 實現:在多的一方建立外鍵,指向一的一方的主鍵,這裡員工表是多的的一方,部門表是一的一方 多對多 案例:學生與課程的關係 關係:一個學生可以選修多門課程,一門課程也可以供 ...
  • ORALCE substr函數及substrb與字元集關係 語法 函數用途: SUBSTR函數用來截取從源字元(參數 char)中截取一部分目標字元,截取方式為限定從源字元截取起始位置(參數 positon),並限定截取目標字元長度(參數 substring_length)。substr系列函數計算 ...
  • ## 簡述 本文主要介紹使用 [CloudCanal](https://www.clougence.com?kw=cnblogs_20230721) 做數據遷移同步時如何對特定數據做脫敏處理。 ## 技術點 ### 自定義代碼 CloudCanal 允許用戶上傳業務代碼到數據任務中,完成數據遷移、同 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...