AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

JVM 性能調優之通過 JProfile 和 JFR 分析系統瓶頸提升系統性能

來源: 責編: 時間:2024-04-02 17:23:23 222觀看
導讀生成 jfrJDK飛行記錄器(JFR)是一種結構化日志記錄工具, 它記錄廣泛的系統級(system-level)事件。類似于飛機上的黑盒子,它會持續記錄飛行數據,用于調查飛行事故。JFR會持續記錄JVM中的 一系列事件,用于診斷問題。這種方式

lvG28資訊網——每日最新資訊28at.com

生成 jfr

JDK飛行記錄器(JFR)是一種結構化日志記錄工具, 它記錄廣泛的系統級(system-level)事件。類似于飛機上的黑盒子,它會持續記錄飛行數據,用于調查飛行事故。JFR會持續記錄JVM中的 一系列事件,用于診斷問題。這種方式的優勢是,它會按時間順序,捕獲導致事故的,詳細系統信息。JFR被設計的,對于性能影響很小,所以 可以安全地在生產環境長時間運行。lvG28資訊網——每日最新資訊28at.com

優勢:lvG28資訊網——每日最新資訊28at.com

  • 對于運行系統的影響比較小,額外占用資源小于 1%
  • 生成的文件比較小,通常生成 10 多分鐘的文件往往小于 1G

查詢 java 進程

通過 jps 命令查詢。lvG28資訊網——每日最新資訊28at.com

lvG28資訊網——每日最新資訊28at.com

通過 ps -ef | grep java 查詢。lvG28資訊網——每日最新資訊28at.com

生成 jfr 文件

生成飛行記錄,使用 JFR.start 該實用程序的診斷命令 jcmd。lvG28資訊網——每日最新資訊28at.com

jcmd 84743 JFR.start duratinotallow=5m settings=profile filename=~/jfr/xxkk.jfr

JProfile 介紹

JProfiler是一個用于分析運行JVM內部情況的專業工具。在開發中你可以使用它,用于質量保證,也可以解決你的生產系統遇到的問題。
JProfiler處理四個主要問題:lvG28資訊網——每日最新資訊28at.com

  • 方法調用這通常被稱為"CPU分析"。方法調用可以通過不同的方式進行測量和可視化, 分析方法調用可以幫助了解你的應用程序正在做什么,并找到提高其性能的方法。
  • 分配分析堆上對象的分配、引用鏈和垃圾回收屬于"內存分析"的范疇。這個功能可以讓你解決內存泄漏,總之使用更少的內存,分配更少的臨時對象。
  • 線程和鎖線程可以持有鎖,例如通過在一個對象上做同步。當多個線程協作時,可能會出現死鎖,JProfiler可以為你可視化這種情況。此外,鎖可能被爭用,這意味著線程在獲得鎖之前必須等待。通過JProfiler可以深入了解線程及其各種鎖情形。
  • 高層子系統許多性能問題發生在更高的語義層面。例如,對于JDBC調用,你可能想找出哪條SQL語句是最慢的。對于這樣的子系統,JProfiler提供了"探針",將特定有效載荷附加到調用樹。

JProfiler的UI是一個桌面應用程序。你可以以交互的方式實時分析JVM,也可以在不使用UI的情況下,自動化分析。保存在快照中的分析數據,可以通過JProfiler UI打開。此外,命令行工具和構建工具集成可以幫助你自動分析會話。lvG28資訊網——每日最新資訊28at.com

注意:JProfile 是商業軟件,希望大家在使用的過程中購買正版授權lvG28資訊網——每日最新資訊28at.com

內存分析

記錄的對象

內存分析中,可以通過記錄的對象找到最耗費內存的對象。只有總對象大小超過固定閾值(通常是堆的1%)的類才會被記錄。默認情況下,JFR中禁用了這個功能,因為它會引入大量的開銷。
下面兩個字段的解釋:lvG28資訊網——每日最新資訊28at.com

  • **實例計數示例, **可以看到某個用例的堆上還剩下哪些對象(實際上會小于總大小除以每個對象的平均大小)。
  • 預估總大小,這個是一個預估值,預估在開始 jfr 記錄,到 jfr 記錄結束這個類的實例總大小

lvG28資訊網——每日最新資訊28at.com

https://docs.oracle.com/en/java/javase/17/docs/specs/man/jfr.html。lvG28資訊網——每日最新資訊28at.com

分配熱點

分配熱點視圖與分配調用樹一起,允許你直接關注負責創建所選類的方法。就像記錄的對象視圖,分配熱點視圖也支持標記當前狀態和觀察一段時間內的差值。視圖中會添加一個差值列,它顯示了熱點自當_標記當前值_操作被調用后的變化。因為默認情況下,分配視圖不會定期更新,所以你必須單擊_計算_工具欄按鈕以獲得一個新數據集然后與基線值比較。lvG28資訊網——每日最新資訊28at.com

計算熱點:lvG28資訊網——每日最新資訊28at.com

lvG28資訊網——每日最新資訊28at.com

熱點分析:lvG28資訊網——每日最新資訊28at.com

lvG28資訊網——每日最新資訊28at.com

熱點的分配類:lvG28資訊網——每日最新資訊28at.com

lvG28資訊網——每日最新資訊28at.com

找到主要是因為 byte[] 數組分配,成為一個分配熱點方法。lvG28資訊網——每日最新資訊28at.com

測試代碼

/** * VM ARG : -Xms64m -Xmx64m */public static void main(String[] args) throws InterruptedException {    List<byte[]> list = new ArrayList<>(1000);    //2kb * 10 * 120 = 2400kb    //數量 = 10 * 120 / 10 = 120    for (int i = 0; i < 10000; i++) {        Thread.sleep(100);        byte[] arr = new byte[1024 * 2];        list.add(arr);    }}

CPU 分析

調用樹

跟蹤所有的方法調用及其調用棧會消耗相當大的內存,短時間內就會耗盡所有內存。另外,在一個繁忙的JVM中,很難直觀獲得方法調用的數量。通常情況下,這個數字是如此之大,以至于定位和跟隨跟蹤是不可能的。
另一個方面,只有將收集到的數據進行匯總,許多性能問題才會變得清晰。這樣,你就可以知道在某個時間段內,方法調用相對于整個活動的重要性。如果是單一的跟蹤,你對你所看的數據的相對重要性沒有概念。
這就是為什么JProfiler建立了一個所有觀察到的調用堆棧的累積樹,并注解有觀察到的時間和調用次數。時間順序信息被消除,只保留總數。樹中的每個節點代表一個至少被觀察過一次的調用堆棧。節點的子節點代表在該調用堆棧中看到的所有傳出調用。
lvG28資訊網——每日最新資訊28at.com

lvG28資訊網——每日最新資訊28at.com

調用樹是"CPU視圖"部分的第一個視圖,當你開始進行CPU分析時,它是一個很好的起點, 因為遵循方法調用從起點到最細化的終點的自上而下視圖,最容易理解。JProfiler按照子節點的總時間進行排序,所以你可以深度優先打開樹,分析對性能影響最大的部分。lvG28資訊網——每日最新資訊28at.com

lvG28資訊網——每日最新資訊28at.com

熱點

如果你的應用程序運行得太慢,你要找到那些占用大部分時間的方法。通過調用樹,有時可以直接找到這些方法, 但通常這樣做是行不通的,因為調用樹可能很大而且有大量葉節點
在這種情況下,你需要反轉調用樹:一個所有方法的列表,按其總的自身時間排序,從所有不同的調用堆棧中累計出來, 并通過回溯跟蹤顯示這些方法是如何被調用的。在熱點樹中,葉節點是入口點, 就像應用程序的main 方法或線程的run 方法。從熱點樹中最深的節點開始,調用向上傳遞到頂層節點。lvG28資訊網——每日最新資訊28at.com

lvG28資訊網——每日最新資訊28at.com

回溯跟蹤中的調用次數和執行時間并不是指該方法節點,而是指頂層熱點節點在這條路徑上被調用的次數。理解這一點很重要:粗略一看,你會認為看到的節點上的信息是該節點的調用次數。然而,在熱點樹中,該信息顯示的是該節點對頂層節點的貢獻。所以,你必須這樣理解這些數字: 沿著這個倒置的調用堆棧,頂層熱點被調用了n 次,總持續時間為t 秒。lvG28資訊網——每日最新資訊28at.com

lvG28資訊網——每日最新資訊28at.com

通過這里可以看到這個 CASE 是因為正則導致的 CPU 熱點。lvG28資訊網——每日最新資訊28at.com

測試代碼

static String pattern = " ^([//u4e00-//u9fa5]+)((·[//u4e00-//u9fa5]+)+|([//u4e00-//u9fa5]+))$";static String defaultName = "張三·無論其是看都看吶阿斯頓啊·薩肯薩肯打開你發都看啊看你發個卡看那可能發看那個可能看吶";public static void main(String[] args) throws InterruptedException {    int time = 1;    String result;    while (true) {        if (time > 0) {            Thread.sleep(time);        }        result = defaultName.matches(pattern) ? "姓名合法" : "姓名不合法";    }}

參考文檔

  • jcmd 指令詳解:https://docs.oracle.com/javacomponents/jmc-5-5/jfr-command-reference/diagnostic-command-reference.htm。
  • 生成 jfr 文件:https://docs.oracle.com/javacomponents/jmc-5-5/jfr-runtime-guide/run.htm。
  • jprofile 中文手冊:https://www.ej-technologies.com/resources/jprofiler/v/13.0/help_zh_CN/doc/main/memory.html。

本文鏈接:http://www.tebozhan.com/showinfo-26-80887-0.htmlJVM 性能調優之通過 JProfile 和 JFR 分析系統瓶頸提升系統性能

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Go 開發踩過的那些坑,你踩過幾個?

下一篇: 利用生成對抗性網絡進行欺詐檢測

標簽:
  • 熱門焦點
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業用途。(幾小時前,swyy發現它已從LLaMA 2更名為Lla
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業發布的ESG報告。ESG是&ldquo;環境保
  • 華為HarmonyOS 4.0將于8月4日發布 或搭載AI大模型技術

    華為宣布HarmonyOS4.0將于8月4日正式發布。此前,華為已經針對開發者公布了HarmonyOS4.0,以便于開發者提前進行適配,也因此被曝光出了一些新系統的特性
  • AI芯片初創公司Tenstorrent獲三星和現代1億美元投資

    Tenstorrent是一家由芯片行業資深人士Jim Keller領導的加拿大初創公司,專注于開發人工智能芯片,該公司周三表示,已經從現代汽車集團和三星投資基金等
  • iQOO 11S屏幕細節公布:首發三星2K E6全感屏 安卓最好的直屏手機

    日前iQOO手機官方宣布,新一代電競旗艦iQOO 11S將會在7月4日19:00正式與大家見面。隨著發布時間的日益臨近,官方關于該機的預熱也更加密集,截至目前已
Top