如何制定性能調優策略

目錄

性能測試攻略

微基準性能測試

宏基準性能測試

熱身問題

多 JVM 情況下的影響

合理分析結果,制定調優策略

推薦閱讀


性能測試攻略

? ?性能測試是提前發現性能瓶頸,保障系統性能穩定的必要措施。下面我先給你介紹兩種常用 的測試方法,幫助你從點到面地測試系統性能。

微基準性能測試

? ?微基準性能測試可以精準定位到某個模塊或者某個方法的性能問題,特別適合做一個功能模 塊或者一個方法在不同實現方式下的性能對比。例如,對比一個方法使用同步實現和非同步 實現的性能。

宏基準性能測試

宏基準性能測試是一個綜合測試,需要考慮到測試環境、測試場景和測試目標。

首先看測試環境,我們需要模擬線上的真實環境。

? ?然后看測試場景。我們需要確定在測試某個接口時,是否有其他業務接口同時也在平行運 行,造成干擾。如果有,請重視,因為你一旦忽視了這種干擾,測試結果就會出現偏差。

? ?最后看測試目標。我們的性能測試是要有目標的,這里可以通過吞吐量以及響應時間來衡量 系統是否達標。不達標,就進行優化;達標,就繼續加大測試的并發數,探底接口的 TPS(最大每秒事務處理量),這樣做,可以深入了解到接口的性能。除了測試接口的吞吐 量和響應時間以外,我們還需要循環測試可能導致性能問題的接口,觀察各個服務器的 CPU、內存以及 I/O 使用率的變化。

以上就是兩種測試方法的詳解。其中值得注意的是,性能測試存在干擾因子,會使測試結果 不準確。所以,我們在做性能測試時,還要注意一些問題。

熱身問題

? ?當我們做性能測試時,我們的系統會運行得越來越快,后面的訪問速度要比我們第一次訪問 的速度快上幾倍。這是怎么回事呢?

? ?在 Java 編程語言和環境中,.java 文件編譯成為 .class 文件后,機器還是無法直接運行 .class 文件中的字節碼,需要通過解釋器將字節碼轉換成本地機器碼才能運行。為了節約內 存和執行效率,代碼最初被執行時,解釋器會率先解釋執行這段代碼。

? ? 隨著代碼被執行的次數增多,當虛擬機發現某個方法或代碼塊運行得特別頻繁時,就會把這 些代碼認定為熱點代碼(Hot Spot Code)。為了提高熱點代碼的執行效率,在運行時, 虛擬機將會通過即時編譯器(JIT compiler,just-in-time compiler)把這些代碼編譯成與本地平臺相關的機碼,并進行各層次的優化,然后存儲在內存中,之后每次運行代碼時, 直接從內存中獲取即可。

所以在剛開始運行的階段,虛擬機會花費很長的時間來全面優化代碼,后面就能以最高性能 執行了。

? ?這就是熱身過程,如果在進行性能測試時,熱身時間過長,就會導致第一次訪問速度過慢, 你就可以考慮先優化,再進行測試。

JVM 情況下的影響

? ?如果我們的服務器有多個 Java 應用服務,部署在不同的 Tomcat 下,這就意味著我們的服 務器會有多個 JVM。任意一個 JVM 都擁有整個系統的資源使用權。如果一臺機器上只部署 單獨的一個 JVM,在做性能測試時,測試結果很好,或者你調優的效果很好,但在一臺機 器多個 JVM 的情況下就不一定了。所以我們應該盡量避免線上環境中一臺機器部署多個 JVM 的情況。

合理分析結果,制定調優策略

? ?這里我將“三步走”中的分析和調優結合在一起講。

? ?我們在完成性能測試之后,需要輸出一份性能測試報告,幫我們分析系統性能測試的情況。 其中測試結果需要包含測試接口的平均、最大和最小吞吐量,響應時間,服務器的 CPU、 內存、I/O、網絡 IO 使用率,JVM 的 GC 頻率等。

? 通過觀察這些調優標準,可以發現性能瓶頸,我們再通過自下而上的方式分析查找問題。首 先從操作系統層面,查看系統的 CPU、內存、I/O、網絡的使用率是否存在異常,再通過命 令查找異常日志,最后通過分析日志,找到導致瓶頸的原因;還可以從 Java 應用的 JVM 層面,查看 JVM 的垃圾回收頻率以及內存分配情況是否存在異常,分析日志,找到導致瓶 頸的原因。

? ?如果系統和 JVM 層面都沒有出現異常情況,我們可以查看應用服務業務層是否存在性能瓶 頸,例如 Java 編程的問題、讀寫數據瓶頸等等。 分析查找問題是一個復雜而又細致的過程,某個性能問題可能是一個原因導致的,也可能是 幾個原因共同導致的結果。我們分析查找問題可以采用自下而上的方式,而我們解決系統性 能問題,則可以采用自上而下的方式逐級優化。下面我來介紹下從應用層到操作系統層的幾 種調優策略。


推薦閱讀

業務冪等性技術架構體系

記一次線上SQL死鎖事故:如何避免死鎖

億級在線百萬并發認證業務分析

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78754.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78754.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78754.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HarmonyOS-ArkUI V2裝飾器@Local裝飾器:組件內部狀態

@Local裝飾器的作用 @Local裝飾器是用來裝飾組件內的狀態的。而且它修飾的變量可以成為數據源。Local裝飾器,作用跟名字差不多,重點突出了“本地”的特性,也就是使用的范圍僅僅限制在組件內部。且它在初始化的時候必須是在本地進行初始化的,不能在外部組件,同時也禁止了外…

Linux線程屬性與多線程開發:API詳解與實戰代碼解析

Linux 線程的屬性 線程池 多線程的創建 線程的屬性 引入 我們設想一個場景,使用pthread_detach時,發現線程早就已經結束了,這時候pthread_detach還能正常發揮清理線程的 獨有空間 的作用嗎? 答案是可以的,但是這難…

測試第二課-------測試分類

作者前言 🎂 ??????🍧🍧🍧🍧🍧🍧🍧🎂 ?🎂 作者介紹: 🎂🎂 🎂 🎉🎉&#x1f389…

MySQL安裝實戰分享

一、在 Windows 上安裝 MySQL 1. 下載 MySQL 安裝包 訪問 MySQL 官方下載頁面。選擇適合你操作系統的版本。一般推薦下載 MySQL Installer。 2. 運行安裝程序 雙擊下載的安裝文件&#xff08;例如 mysql-installer-community-<version>.msi&#xff09;。如果出現安全…

數據庫預熱

介紹 Database Warm-up &#x1f9e0; 一句話理解 數據庫是在應用啟動階段&#xff0c;提前建立數據庫連接 或 執行輕量 SQL 操作&#xff0c;從而 加快首個請求的響應速度 的一種優化手段 &#x1f3af; 為什么需要數據庫預熱&#xff1f; 當 FastAPI 或其他 Web 服務剛啟…

SearXNG

SearXNG 什么是 SearXNG &#xff1f;說白了&#xff0c;其實就是一個免費開源的搜索引擎。那為什么要本地安裝它呢&#xff1f; 看它官網的解釋(翻譯)&#xff0c;當然&#xff0c;其中官方也有一篇文檔解釋了為什么需要部署使用私有示例&#xff1a;為什么使用私有實例&…

js 顏色轉換分析

一、十六進制轉RGB function hexToRgba(hex) {// 移除 # 字符hex hex.replace(#, );// 處理簡寫形式如 #fffif (hex.length 3) {hex hex[0] hex[0] hex[1] hex[1] hex[2] hex[2];}// 轉換為十進制const r parseInt(hex.substring(0, 2), 16); // 截圖前兩位&#xff0…

智能資源管理機制-重傳機制

一、發送端資源管理的核心機制 1. 滑動窗口&#xff08;Sliding Window&#xff09; 這是TCP協議的核心優化設計&#xff1a; 窗口動態滑動&#xff1a;發送端不需要保留所有已發送的分組&#xff0c;只需維護一個"發送窗口"窗口大小&#xff1a;由接收方通告的接…

基于SSM+Layui畢業設計選題系統源碼

項目介紹 基于SSM+Layui畢業設計選題系統源碼,可以作為課程設計項目參考,該系統分為三個角色: 管理員:用戶管理(對學生和老師的信息進行維護),統計分析(對老師課題情況以及學生選題情況信息進行維護),修改密碼 老師:個人信息維護,畢業設計題目管理,報名學生管理…

通過uri獲取文件路徑手機適配

青銅版本 return contentResolver.query(this, arrayOf(MediaStore.MediaColumns.DATA), null, null).let {if (it?.moveToFirst() true) {val columnIndex it.getColumnIndex(MediaStore.MediaColumns.DATA)val path it.getString(columnIndex)it.close()return path}&quo…

vue模擬撲克效果

vue模擬撲克效果 效果圖&#xff1a; step1:C:\Users\wangrusheng\PycharmProjects\untitled18\src\views\Home.vue <template><div class"poker-container"><!-- 使用復合數據對象實現雙行顯示 --><divv-for"(card, index) in POKER_…

基礎數學:圖論與信息論

微積分與概率論由此進&#xff1a;基礎數學&#xff1a;微積分和概率與統計-CSDN博客 線代與優化理論由此進&#xff1a;基礎數學&#xff1a;線性代數與優化理論-CSDN博客 數值分析與離散數學由此進&#xff1a;基礎數學&#xff1a;數值分析與離散數學-CSDN博客 四、圖論與…

構建智能期貨交易策略分析應用:MCP與AI的無縫集成

引言 隨著金融科技的快速發展&#xff0c;數據驅動的交易決策已成為期貨交易領域的重要趨勢。本文將深入探討一個結合了Model Content Protocol (MCP)和AI技術的期貨交易策略分析應用——Futures MCP。該應用不僅提供了豐富的技術分析工具&#xff0c;還通過MCP協議與大型語言…

0x02.Redis 集群的實現原理是什么?

回答重點 Redis 集群&#xff08;Redis cluster&#xff09;是通過多個 Redis 實例組成的&#xff0c;每個主節點實例負責存儲部分的數據&#xff0c;并且可以有一個或多個從節點作為備份。 具體是采用哈希槽&#xff08;Hash Slot&#xff09;機制來分配數據&#xff0c;將整…

基本的DOS命令

一.打開CMD方式&#xff1a; winR 輸入cmd 開始系統命令提示符 在任意文件夾下&#xff0c;shift&#xff0b;鼠標右擊&#xff0c;在此處打開命令 資源管理器的地址欄前面輸入cmd 以管理員身份打開cmd&#xff1a;選擇以管理員方式運行 二.常用的Dos命令 #盤符切換 盤符…

深度剖析:架構評估的常用方法與應用

架構評估是確保系統架構滿足需求、性能和質量等方面要求的重要環節&#xff0c;以下是一些常見的架構評估方法的詳細介紹&#xff1a; 一、基于調查問卷或檢查表的評估方法 1.方法概述&#xff1a;該方法通過設計一系列針對性的問題或檢查項&#xff0c;形成問卷或檢查表&…

代碼隨想錄算法訓練營第十六天

LeetCode題目: 530. 二叉搜索樹的最小絕對差501. 二叉搜索樹中的眾數236. 二叉樹的最近公共祖先3272. 統計好整數的數目(每日一題) 其他: 今日總結 往期打卡 530. 二叉搜索樹的最小絕對差 跳轉: 530. 二叉搜索樹的最小絕對差 學習: 代碼隨想錄公開講解 問題: 給你一個二叉搜…

基于雙閉環PID控制器的永磁同步電機控制系統匝間故障Simulink仿真

歡迎微?關注“電擊小子程高興的MATLAB小屋”獲取巨額優惠 1.模型簡介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2013Rb&#xff09;軟件。建議采用matlab2013 Rb及以上版本打開。&#xff08;若需要其他版本可聯系代為轉換&#xff0c;高于該版本的matlab均可正…

02-libVLC的視頻播放器:播放音視頻文件以及網絡流

libvlc_new(0, nullptr)功能:創建并初始化libVLC的核心實例,是使用所有libVLC功能的前提。 參數:第一個參數:參數數量(通常設為0)第二個參數:參數列表(通常為nullptr,表示使用默認配置)返回值:成功返回libvlc_instance_t*指針,失敗返回nullptr。注意事項:可通過參…

2025藍橋杯省賽C++B組解題思路

由于題面還沒出來&#xff0c;現在先口胡一下思路 填空題直接打表找規律或者亂搞一下就能出&#xff0c;從大題開始說。 1&#xff0c;題意&#xff1a; 給你一個數組&#xff0c;這個數組里有幾個數可以被一個連續遞增的數字區間求和得出 思路&#xff1a;詐騙題&#xff0c;顯…