小記一篇Benchmark的學習筆記
1.什么是benchmark
在維基百科中,是這樣子講的
“As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, tests were developed that allowed comparison of different architectures.”
大致意思就是,隨著計算機體系結構的進步,我們無法再簡簡單單的從他們的特性去比較計算機系統的性能,所以就誕生了我們今天的主角? `Benchmark` !!
- Benchmark :?"基準測試"?是一種用于衡量和評估系統性能的方法。在計算機領域,它通常指的是通過運行一系列標準化的測試來評估硬件或軟件的性能。基準測試可以幫助人們比較不同系統、不同組件或不同配置之間的性能差異!!!
其實,用自己的話來說就是:
- 通過相應的工具,手段,對硬件組件 ,軟件應用程序如CPU性能、內存帶寬、硬盤讀寫速度等單個組件或整個系統進行測試,并且將多次測量得到的結果用于性能的評估和比較,優化和調整,成為日后產品上市的決策支持等!!
下面,我們就來詳細的講解一下Benchmark的過程!!
2.確認測試的目標
對于每一次測試,我們都要選擇對應的目標,這樣才便于我們后續的數據分析和對比
如果目標是一個數據庫,那么就可以從以下角度出發
- 查詢性能:就拿mysql為例子,像這種查詢遇到數據量大的,可以通過記錄查詢的執行時間或者查詢的吞吐量來評估
- 并發連接數?:在現實生活中,我們可能會遇到大量用戶同時對數據庫進行查詢,那么我們通過增加并發的數據庫連接數,并觀察數據庫的響應時間和系統資源利用率來評估。
- 數據插入和更新性能:在sql注入中,有一些服務器會對User_Agent Cookie Refer頭進行存儲,那么就會用到mysql里面的 update 或者insert,那么,我們就可以觀察插入和更新大量數據時的性能表現,包括單條數據的插入/更新性能和批量數據的插入/更新性能
如果他是一個網絡服務系統,那么我們就可以從以下角度出發
- 響應時間 :用戶在對服務其發送請求,然后經過服務器的處理,再返回給用戶,這期間需要的時間就是響應時間我們通過記錄這些時間,可以評估整個請求-響應周期的性能表現。
- 吞吐量:吞吐量可以表示為每秒處理的請求數量或每秒傳輸的數據量,它反映了系統的處理能力和性能瓶頸。
- 并發連接數:我們可以通過一些測試軟件,如jmeter等工具,在一瞬間建立多并發連接數量,用來模擬在某一時刻的大量用戶涌入的情景,然后通過觀察系統的響應時間和資源利用率,可以評估系統的并發性能和資源消耗情況
- 穩定性和可靠性 ,在上面建立多并發的基礎上我們還可以通過觀察系統的穩定性和異常處理能力,可以評估系統在各種條件下的表現
3.選擇合理的測試工具
還是拿上面的兩個測試目標來舉例子
網絡服務系統
- Apache JMeter:Apache JMeter是一款功能強大的開源性能測試工具,主要用于測試各種類型的網絡服務系統,包括Web應用程序、Web服務、數據庫服務器等。它支持多線程測試、分布式測試、圖形化測試結果展示等功能,非常適合進行負載測試和壓力測試。
? 這個工具經常用來壓力測試
- Gatling:Gatling是一款基于Scala語言開發的現代化性能測試工具,特別適用于高并發場景下的性能測試。它采用基于DSL(領域特定語言)的方式進行測試腳本編寫,支持使用Scala語言進行自定義腳本開發,具有良好的可擴展性和靈活性。
- Wrk:Wrk是一款簡單而強大的HTTP性能測試工具,適用于對HTTP服務進行高并發的壓力測試。它采用多線程和非阻塞I/O的方式進行測試,并能夠生成詳細的測試報告和統計信息。
相信大家都發現了,只要是網絡服務系統,壓測它的工具一般都多并發,多線程的壓力測試工具
?????????????????????????
數據庫
- SysBench:SysBench 是一個跨平臺的基準測試工具,支持多種數據庫系統,包MySQL、PostgreSQL、MariaDB 等。它可以用于測試數據庫的性能、并發連接數、事務處理能力等
- HammerDB:HammerDB 是一個開源的基準測試工具,主要用于測試關系型數據庫系統,如 Oracle、SQL Server、DB2 等。它提供了豐富的基準測試場景和工具,可以模擬真實的數據庫工作負載并評估數據庫的性能表現
- Percona Toolkit:Percona Toolkit 是一個由 Percona 公司提供的一套 MySQL 和 MongoDB 管理工具,其中包括一些基準測試工具,如 pt-query-digest、pt-upgrade 等,可以用于評估和優化數據庫的性能。
4.準備測試環境
這個也是非常重要的一步,我們需要保測試環境的穩定性和一致性,包括硬件配置、操作系統版本、驅動程序版本等。關閉不必要的后臺任務和服務,以確保測試結果的準確性。
5.執行基準測試
當變量都設置好之后,現在開始進行測試。從基準線開始進行測試(已知的起點),并有系統地調整服務器設置。每個測試序列都會有一個結果,記錄結果以便以后引用。在這種情況下,一個測試序列可看做是一次硬件設置更改。每應用一次新的設置,都必須重新進行測試并記錄結果。一旦有足夠的運行周期,工程師應該有一份完整的數據以完成他們的推論。
6.收集測試執行結果
其中包括各種性能指標的數據,如響應時間、吞吐量、并發連接數等。使用工具提供的報告功能或自定義腳本來自動化數據收集過程。
7.分析和比較結果
在這個步驟中,我們需要進行以下步驟
-
總體性能評估:首先,對系統的總體性能進行評估。這包括查看各項性能指標的平均值、中位數、標準差等統計數據,以了解系統的整體表現。
-
識別性能瓶頸:通過分析測試結果,識別系統性能的瓶頸所在。這可能包括響應時間較長的操作、吞吐量不足的任務、并發連接數過高導致的系統資源耗盡等。通過識別性能瓶頸,可以確定優化的重點和方向。
-
比較不同場景下的性能數據:如果進行了多個測試場景的基準測試,需要比較不同場景下的性能數據。這可以幫助確定系統在不同條件下的性能表現,并找出最佳的配置和參數組合。
-
對比不同系統或組件的性能:如果進行了多個系統或組件的基準測試,需要對比它們的性能數據。這可以幫助選擇最適合自己需求的系統或組件,并確定哪些系統或組件需要進一步優化。
-
查找異常數據和趨勢:檢查測試結果中的異常數據和趨勢。這可能包括某些測試任務的性能突然下降或波動、系統資源利用率異常高或異常低等。通過查找異常數據和趨勢,可以發現系統中的問題并及時解決。
這個步驟就像計算機取證的分析的重要性一樣
通過分析和比較基準測試結果意味著對測試數據進行詳細的研究和比較,以便從中獲取有用的見解和信息。這個過程的目的是為了理解系統的性能表現,識別潛在的問題或瓶頸,并確定優化的方向。
8.提出優化建議
Benchmark的一個最終的目的,就是提出優化建議
在測試中通常會選擇一個或多個基準模型作為比較的標準。這些基準模型可以是已知的、在該任務上表現良好的模型,用來與新的方法進行比較?
當然了,除了需要從網上尋求相應的標準來進行對比以外,我們還需要根絕自身的特殊情況(如服務器的運存等條件)進行綜合的測試
分析問題原因:針對性能瓶頸和問題,深入分析其根本原因。這可能涉及到系統的架構設計、代碼實現、數據庫優化、網絡配置等方面的問題。通過分析問題原因,可以確定優化的方向和重點。
9.驗證和重復測試?
?你以為做完上面的就完事了嗎?? 肯定不是!!!
當我們得到了上面的測試和分析結果之后,我們還要去對這些結果進行進一步測試,因為我們不確定時候改進后的參數是否還會符合要求 理由如下:
-
確認優化效果:優化措施的實施并不總是能立即帶來明顯的改善。通過驗證和重復測試,可以確認優化措施的實際效果是否與預期一致。這有助于確定哪些優化是有效的,哪些需要進一步改進。
-
評估系統穩定性:優化措施可能會對系統的穩定性產生影響。通過驗證和重復測試,可以評估優化措施對系統穩定性的影響,并及時發現和解決潛在的問題,以確保系統的穩定運行。
-
排除誤差和變化:基準測試結果可能受到各種因素的影響,如測試環境的變化、測試工具的誤差等。通過重復測試,可以排除這些誤差和變化的影響,確保測試結果的可靠性和一致性。
-
驗證優化建議的可行性:重復測試可以驗證提出的優化建議的可行性和有效性。如果優化建議在多次測試中都能得到相似的結果,那么說明該建議是可行的,并且對系統性能有實際的改進作用。
-
持續改進和優化:系統的性能優化是一個持續改進的過程。通過驗證和重復測試,可以不斷地評估系統的性能,并根據測試結果進行調整和優化,以滿足不斷變化的需求和挑戰。
10.做出最終的建議
通過與第一次的結果進行對比,選出最優的結果,并且根據以下參考,做出建議
數據庫優化:
- 索引優化:評估數據庫的索引使用情況,根據查詢模式和頻率優化索引設計。
- 查詢優化:審查并優化復雜、低效的查詢語句,確保查詢執行效率高。
- 表結構優化:評估數據庫表結構,合理設計和規劃表之間的關系,以及字段的數據類型和長度。
- 緩存策略優化:考慮使用緩存技術來減輕數據庫壓力,提高數據訪問速度。
網絡服務優化:
- 響應時間優化:優化網絡服務的響應時間,包括優化代碼、減少網絡延遲、使用高效的數據傳輸協議等。
- 并發處理優化:評估系統的并發處理能力,優化并發處理策略和線程池配置,提高系統的并發處理能力。
- 負載均衡優化:考慮使用負載均衡技術來平衡服務器負載,確保系統的穩定性和可靠性。
應用程序優化:
- 代碼優化:審查并優化應用程序的代碼,提高代碼的執行效率和性能。
- 內存管理優化:優化內存使用,包括減少內存泄漏、優化內存分配和釋放策略等。
- 異步處理優化:考慮使用異步處理技術來提高系統的并發處理能力和響應速度。
等等.........