狂收 3K Star!一個高性能、無侵入的 Java 性能監控和統計工具,十分強悍!

来源:https://www.cnblogs.com/javastack/archive/2023/07/03/17522149.html
-Advertisement-
Play Games

## 背景 隨著所在公司的發展,應用服務的規模不斷擴大,原有的垂直應用架構已無法滿足產品的發展,幾十個工程師在一個項目里並行開發不同的功能,開發效率不斷降低。 於是公司開始全面推進服務化進程,把團隊內的大部分工程師主要精力全部都集中到服務化中。服務化可以讓每個工程師僅在自己負責的子項目中進行開發,提 ...


背景

隨著所在公司的發展,應用服務的規模不斷擴大,原有的垂直應用架構已無法滿足產品的發展,幾十個工程師在一個項目里並行開發不同的功能,開發效率不斷降低。

於是公司開始全面推進服務化進程,把團隊內的大部分工程師主要精力全部都集中到服務化中。服務化可以讓每個工程師僅在自己負責的子項目中進行開發,提高了開發的效率,但是服務化同時也帶來了其他問題:

  • 無法知道每個服務的運行情況,例如,某一臺服務它目前的 QPS 是多少?它的平均延遲是多少,99% 的延遲是多少,99.9% 的延遲又是多少?
  • 某一個介面響應時間慢,如何定位是哪個方法引起的?
  • 每個服務的負載是否均衡?
  • 當服務出現抖動時,如何判斷是 DB、Cache 還是下游服務引起的?
  • DB 和 Cache 響應延遲是多少?
  • 如何評估服務的容量,隨著服務的調用量越來越大,這個服務需要多少機器來支撐?什麼時候應該加機器?

針對以上開發中的煩惱,今天我們介紹一個針對高併發、低延遲應用設計的高性能 Java 性能監控和統計工具——MyPerf4J

推薦一個開源免費的 Spring Boot 實戰項目:

https://github.com/javastacks/spring-boot-best-practice

使用場景

  • 在開發環境中快速定位 Java 應用程式的性能瓶頸
  • 在生產環境中長期監控 Java 應用程式的性能指標

特性

  • 高性能: 單線程支持每秒 1000萬次 響應時間的記錄,每次記錄只花費 73納秒
  • 無侵入: 採用 JavaAgent 方式,對應用程式完全無侵入,無需修改應用代碼
  • 低記憶體: 採用記憶體復用的方式,整個生命周期只產生極少的臨時對象,不影響應用程式的GC
  • 高精度: 採用納秒來計算響應時間
  • 高實時: 支持秒級監控,最低 1 秒!

監控指標

MyPerf4J 為每個應用收集數十個監控指標,所有的監控指標都是實時採集和展現的。

下麵是 MyPerf4J 目前支持的監控指標列表:

Method

RPS,Count,Avg,Min,Max,StdDev,TP50, TP90, TP95, TP99, TP999, TP9999, TP99999, TP100

Memory

HeapInit,HeapUsed,HeapCommitted,HeapMax,NonHeapInit,NonHeapUsed,NonHeapCommitted,NonHeapMax

JVM GC

CollectCount,CollectTime

JVM Class

Total,Loaded,Unloaded

快速啟動

MyPerf4J 採用 JavaAgent 配置方式,透明化接入應用,對應用代碼完全沒有侵入。

下載

  • 下載並解壓 MyPerf4J-ASM.zip
  • 閱讀解壓出的 README 文件
  • 修改解壓出的 MyPerf4J.properties 配置文件中 app_namemetrics.log.xxxfilter.packages.include 的配置值

MyPerf4J-ASM.zip包 :https://github.com/LinShunKang/Objects/blob/master/zips/CN/MyPerf4J-ASM-3.3.0-SNAPSHOT.zip?raw=true

配置

在 JVM 啟動參數裡加上以下兩個參數

-javaagent:/path/to/MyPerf4J-ASM.jar
-DMyPerf4JPropFile=/path/to/MyPerf4J.properties

運行

啟動應用,監控日誌輸出到 /path/to/log/method_metrics.log:

MyPerf4J Method Metrics [2020-01-01 12:49:57, 2020-01-01 12:49:58]
Method[6]                            Type        Level  TimePercent      RPS  Avg(ms)  Min(ms)  Max(ms)    StdDev    Count     TP50     TP90     TP95     TP99    TP999   TP9999
DemoServiceImpl.getId2(long)      General      Service      322.50%     6524     0.49        0        1     0.50      6524        0        1        1        1        1        1
DemoServiceImpl.getId3(long)      General      Service      296.10%     4350     0.68        0        1     0.47      4350        1        1        1        1        1        1
DemoServiceImpl.getId4(long)      General      Service      164.60%     2176     0.76        0        1     0.43      2176        1        1        1        1        1        1
DemoServiceImpl.getId1(long)      General      Service        0.00%     8704     0.00        0        0     0.00      8704        0        0        0        0        0        0
DemoDAO.getId1(long)         DynamicProxy          DAO        0.00%     2176     0.00        0        0     0.00      2176        0        0        0        0        0        0
DemoDAO.getId2()             DynamicProxy          DAO        0.00%     2176     0.00        0        0     0.00      2176        0        0        0        0        0        0

卸載

在 JVM 啟動參數中去掉以下兩個參數,重啟即可卸載此工具。

-javaagent:/path/to/MyPerf4J-ASM.jar
-DMyPerf4JPropFile=/path/to/MyPerf4J.properties

開源地址:github.com/LinShunKang/MyPerf4J

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2022最新版)

2.勁爆!Java 協程要來了。。。

3.Spring Boot 2.x 教程,太全了!

4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優雅的方式!!

5.《Java開發手冊(嵩山版)》最新發佈,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!


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

-Advertisement-
Play Games
更多相關文章
  • # rocketmq-console基本使用 作用:rocketmq-console是rocketmq的一款可視化工具,提供了mq的使用詳情等功能。 ## 一、安裝部署 > 下載rocketmq組件 **rocketmq**:[下載地址](https://rocketmq.apache.org/zh ...
  • ## 教程簡介 大數據分析是指對規模巨大的數據進行分析。大數據可以概括為5個V, 數據量大(Volume)、速度快(Velocity)、類型多(Variety)、價值(Value)、真實性(Veracity)。大數據作為時下最火熱的IT行業的辭彙,隨之而來的數據倉庫、數據安全、數據分析、數據挖掘等等 ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 本文是《JavaCV的攝像頭實戰》系列的 ...
  • # 1、什麼是MapReduce 1. Hadoop MapReduce 是一個 `分散式計算框架`,用於輕鬆編寫分散式應用程式,這些應用程式以可靠,容錯的方式並行處理大型硬體集群(數千個節點)上的大量數據(多TB數據集) 2. MapReduce 是一種`面向海量數據`處理的一種指導思想,也是一種 ...
  • # Cookie對象 Cookie是瀏覽器提供的一種技術,通過伺服器的程式能將一些只須保存在客戶端,或者在客戶端進行處理的數據,放在本地的電腦上,不需要通過網路傳輸,因而提高網頁處理的效率,並且能夠減少伺服器的負載,但是由於Cook是伺服器端保存在客戶端的信息,所以其安全性也是很差的。例如常見的記 ...
  • `numpy` 數組通常是用於數值計算的多維數組,而排序功能可以快速、準確地對數據進行排序,從而得到更加清晰、易於分析的結果。 在數據分析和處理過程中,常常需要對數據進行排序,以便更好地理解和發現其中的規律和趨勢。 排序會應用在很多場景中,比如: 1. 數據分類:將數據按照一定的特征進行分類,可以通 ...
  • ## 前言 閱讀此篇前,可先閱讀[尾碼數組](https://www.cnblogs.com/pdpdzaa/p/17436993.html) ## LCP ```LCP``` 就是最長公共首碼,在尾碼數組中,$LCP(i,j)$ 就代表從 $sa_i$ 開始的尾碼和從 $sa_j$ 開始的尾碼的最 ...
  • 我在不要更新挑戰中堅持了一年🎉🎉🎉,你也來試試吧(咕咕咕)! 好言歸正傳,本次更新帶來的是經典游戲掃雷,基於JavaFX實現。篇幅有限,文章主要介紹核心操作實現,不會列出所有代碼。需要完整源碼或是想預覽最終效果,可以點擊下方鏈接。後續會逐步更新細節實現方面的內容,將來吧反正(肯定不鴿!) 視頻 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...