吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

硬核:JVM性能調(diào)優(yōu),有哪些好用的內(nèi)存分析神器?

Android編程精選 ? 來(lái)源:Android編程精選 ? 2023-02-11 10:58 ? 次閱讀
對(duì)于高并發(fā)訪問(wèn)量的電商、物聯(lián)網(wǎng)、金融、社交等系統(tǒng)來(lái)說(shuō),JVM內(nèi)存優(yōu)化是非常有必要的,可以提高系統(tǒng)的吞吐量和性能。通常調(diào)優(yōu)的首選方式是減少FGC次數(shù)或者FGC時(shí)間,以避免系統(tǒng)過(guò)多地暫停。FGC達(dá)到理想值后,比如一天或者兩天觸發(fā)一次FGC。FCT時(shí)間優(yōu)化為100~300毫秒后,再減少YoungGC次數(shù)或者YoungGC時(shí)間,YoungGC仍然會(huì)消耗CPU資源,優(yōu)化YoungGC調(diào)用次數(shù)和消耗的CPU資源,可以提高系統(tǒng)的吞吐量。

優(yōu)化GC前,必須獲取GC的實(shí)際使用情況,最好的方式是通過(guò)CG Log收集垃圾回收日志,通過(guò)一些可視化工具查看垃圾回收分析數(shù)據(jù),比如GCEasy。持續(xù)優(yōu)化和對(duì)比優(yōu)化前后的GC Log,能確認(rèn)吞吐量和性能是否得到提升。

下面推薦幾個(gè)常用的內(nèi)存分析命令和工具

jstat命令

JDK自帶的jstat命令用于查看虛擬機(jī)垃圾回收的情況,如下命令使用gcutil參數(shù)輸出堆內(nèi)存使用情況統(tǒng)計(jì):

jstat–gcutil-h20pid1000100

此命令顯示進(jìn)程為pid的內(nèi)存使用匯總,1000毫秒輸出一次,總共輸出100行。-h 20表示每20行輸出一次表頭。-gcutil表示顯示JVM內(nèi)存使用匯總統(tǒng)計(jì):

bbbe497e-a9b1-11ed-bfe3-dac502259ad0.png

列表顯示了虛擬機(jī)各個(gè)代的使用情況,描述了堆內(nèi)存的使用占比和垃圾回收次數(shù),以及占用時(shí)間,具體含義如下:

  • S0,第一個(gè)幸存區(qū)使用比值。
  • S1,第二個(gè)幸存區(qū)的使用率。
  • E,伊甸園區(qū)的使用比值。
  • O,老年代。
  • M,方法區(qū)、元空間使用率。
  • CCS,壓縮使用比值。
  • YGC,年輕代垃圾回收次數(shù)。
  • YGCT,年輕帶垃圾回收占用時(shí)間。
  • FGC,全局垃圾回收次數(shù),這對(duì)性能影響至關(guān)重要。
  • FGCT,全局垃圾回收的消耗時(shí)間。
  • GCT,總的垃圾回收時(shí)間。

可以看到S0、S1、E變化頻率高,說(shuō)明程序在頻繁創(chuàng)建生命周期短的對(duì)象,F(xiàn)GC為0,表示還未做過(guò)全局垃圾回收。如果FGC變化頻率很高,則說(shuō)明系統(tǒng)性能和吞吐量將下降,或者可能出現(xiàn)內(nèi)存溢出。

其他查看匯總信息的常用選項(xiàng)如下:

  • -gc,類似gcutil,gcutil以百分比形式顯示內(nèi)存的使用情況,gc顯示的是內(nèi)存占用的字節(jié)數(shù),以KB的形式輸出堆內(nèi)存的使用情況。

  • -gccause,類似gcutil,額外輸出GC的原因。

jmap命令

jmap命令用于保存虛擬機(jī)內(nèi)存鏡像到文件中,然后可以使用JVisualVM或者M(jìn)AT工具進(jìn)行進(jìn)一步分析。命令如下:

jmap-dump:format=b,file=filename.hprofpid

需要注意,實(shí)際系統(tǒng)會(huì)有2GB到8GB內(nèi)存,此命令會(huì)導(dǎo)致虛擬機(jī)暫停工作1~3秒。還有一種是被動(dòng)獲取方式,當(dāng)虛擬機(jī)出現(xiàn)內(nèi)存溢出的時(shí)候,會(huì)主動(dòng)“dump”內(nèi)存文件。添加虛擬機(jī)啟動(dòng)參數(shù):

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heapdump.hprof

當(dāng)虛擬機(jī)判斷達(dá)到內(nèi)存溢出觸發(fā)條件的時(shí)候,會(huì)有如下輸出并保存鏡像文件:

java.lang.OutOfMemoryError:Javaheapspace
Dumpingheaptoheapdump.hprof...

當(dāng)獲得鏡像文件后,打開(kāi)JvisualVM工具,選擇菜單“File”,點(diǎn)擊裝入,選擇我們保存過(guò)的dump文件,這時(shí)面板會(huì)打開(kāi)內(nèi)存鏡像文件。打開(kāi)較大的內(nèi)存鏡像文件需要較長(zhǎng)的時(shí)間,需要耐心等候,其他工具,如MAT,或者商業(yè)的YourKit Java Profiler打開(kāi)鏡像文件更快,分析功能更強(qiáng)大。

GCeasy

GCeasy是一個(gè)分析GC日志文件的在線網(wǎng)站,能根據(jù)上傳的GC日志,以圖表形式顯示GC回收過(guò)程和統(tǒng)計(jì)數(shù)據(jù)。下圖顯示的是GC性能的統(tǒng)計(jì)情況,如吞吐量顯示為99.935%,說(shuō)明只有少量CPU資源用于垃圾回收。最長(zhǎng)的GC時(shí)間是20毫秒,屬于正常范圍。在測(cè)試JVM參數(shù)調(diào)整是否能增加吞吐量,減小垃圾回收占用的CPU時(shí),可以使用這個(gè)統(tǒng)計(jì)功能。

bbd2ed8e-a9b1-11ed-bfe3-dac502259ad0.png

下圖統(tǒng)計(jì)了GC總的時(shí)間和回收的字節(jié)數(shù),也顯示了Full GC的統(tǒng)計(jì)情況。

bbee2964-a9b1-11ed-bfe3-dac502259ad0.png

JMC

Java Mission Control簡(jiǎn)稱JMC,是JDK自帶的工具,是一個(gè)高性能的對(duì)象監(jiān)視、管理、產(chǎn)生時(shí)間分析和診斷的工具套件,筆者主要用來(lái)追蹤熱點(diǎn)代碼與熱點(diǎn)線程,是主要的內(nèi)存優(yōu)化調(diào)優(yōu)工具。

類似JVisualVM,通過(guò)JMX連接進(jìn)入JMC控制臺(tái)。

通過(guò)連接到遠(yuǎn)程JVM進(jìn)程后,可以執(zhí)行飛行記錄(FlightRecord),選擇飛行記錄存放的路徑與執(zhí)行時(shí)間即可,如下圖所示。需要注意的是,執(zhí)行飛行記錄功能時(shí)會(huì)對(duì)當(dāng)前JVM進(jìn)程有一定的性能影響(大約為5%~10%),所以建議JMC連接隔離環(huán)境中的服務(wù)器并執(zhí)行飛行記錄功能。

bbffff68-a9b1-11ed-bfe3-dac502259ad0.png

通過(guò)一段時(shí)間的記錄,飛行記錄可以反映線程的繁忙程度,以及CPU的熱點(diǎn)方法。

使用熱點(diǎn)方法可以直接找到最耗時(shí)的幾個(gè)方法,對(duì)熱點(diǎn)方法重點(diǎn)優(yōu)化就可以使CPU的使用率下降一大截。

飛行記錄還可以反映內(nèi)存增長(zhǎng)的熱點(diǎn)方法,以及顯示單位時(shí)間內(nèi)創(chuàng)建的最多對(duì)象的方法。下圖為找到的內(nèi)存對(duì)象中創(chuàng)建的最多的char[]的方法,一個(gè)是Fastjson,另一個(gè)是Kryo。

bc1481b8-a9b1-11ed-bfe3-dac502259ad0.png

小結(jié):通過(guò)JMC的熱點(diǎn)方法的統(tǒng)計(jì)結(jié)果可以有針對(duì)性地進(jìn)行優(yōu)化,筆者通過(guò)對(duì)線上系統(tǒng)進(jìn)行優(yōu)化使得CPU使用率下降了40%、內(nèi)存GC頻率下降了100%以上。

MAT

MAT是Memory Analyzer的簡(jiǎn)稱,它是一款功能強(qiáng)大的Java堆內(nèi)存分析器,可以分析具有數(shù)億個(gè)對(duì)象的內(nèi)存鏡像,快速計(jì)算對(duì)象大小,自動(dòng)找到嫌疑的泄漏對(duì)象并形成內(nèi)存泄漏報(bào)告。MAT是基于Eclipse開(kāi)發(fā)的,是一款免費(fèi)的內(nèi)存鏡像分析工具,是筆者發(fā)現(xiàn)內(nèi)存泄漏原因的主要工具。

通過(guò)File-Open Heap Dump可以打開(kāi)內(nèi)存鏡像文件,顯示內(nèi)容如下圖所示。

bc3a91f0-a9b1-11ed-bfe3-dac502259ad0.png

它提供了Leak Suspects 報(bào)告,輸出有可能發(fā)生內(nèi)存泄漏的對(duì)象。

OQL

OQL語(yǔ)句類似SQL語(yǔ)句,可以在VisualVM、MAT等大多數(shù)內(nèi)存鏡像分析工具中執(zhí)行,完成對(duì)象查找任務(wù)。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3055

    瀏覽量

    74327
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    774

    瀏覽量

    44250
  • JVM
    JVM
    +關(guān)注

    關(guān)注

    0

    文章

    158

    瀏覽量

    12260

原文標(biāo)題:硬核:JVM性能調(diào)優(yōu),有哪些好用的內(nèi)存分析神器?

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    java開(kāi)發(fā)人員不了解jvm調(diào)優(yōu)對(duì)工作有影響嗎

    作為一名java開(kāi)發(fā)人員,不了解jvm調(diào)優(yōu)對(duì)工作什么影響?
    發(fā)表于 04-10 11:57

    JVM性能指標(biāo)分析

    JVM性能調(diào)優(yōu)實(shí)踐——JVM
    發(fā)表于 10-17 15:00

    Jvm垃圾回收機(jī)制及性能調(diào)優(yōu)實(shí)戰(zhàn)

    JVM中自動(dòng)檢測(cè)并移除不再使用的數(shù)據(jù)對(duì)象的這種機(jī)制稱為:垃圾回收,簡(jiǎn)稱GC。JVM通過(guò)使用垃圾收集器及使用相應(yīng)的垃圾回收算法將內(nèi)存中不再被使用的對(duì)象進(jìn)行回收。由于不同JAVA對(duì)象存活時(shí)間是不一樣
    發(fā)表于 04-03 14:31 ?2次下載

    關(guān)于JVM調(diào)優(yōu)知識(shí)

    最近很多小伙伴跟我說(shuō),自己學(xué)了不少JVM調(diào)優(yōu)知識(shí),但是在實(shí)際工作中卻不知道何時(shí)對(duì)JVM進(jìn)行調(diào)優(yōu)
    的頭像 發(fā)表于 09-14 14:54 ?885次閱讀

    Alluxio線程池結(jié)構(gòu)與吞吐量調(diào)優(yōu)

    本文介紹了 Alluxio Master 的線程池結(jié)構(gòu)與每個(gè)線程的功能。在調(diào)優(yōu)過(guò)程中,利用分析結(jié)果調(diào)整審計(jì)日志的 blocking queue,調(diào)整 UFS-SYNC-PREFETCH 線程數(shù),
    發(fā)表于 11-11 11:36 ?634次閱讀

    jvm內(nèi)存分析命令和工具

    JVM內(nèi)存分析是Java開(kāi)發(fā)和調(diào)優(yōu)過(guò)程中非常重要的一部分。通過(guò)對(duì)JVM
    的頭像 發(fā)表于 12-05 11:07 ?1247次閱讀

    javajvm調(diào)優(yōu)幾種方法

    基本概念。JVM(Java Virtual Machine,Java虛擬機(jī))是Java運(yùn)行時(shí)環(huán)境的核心組件,負(fù)責(zé)解釋和執(zhí)行Java字節(jié)碼文件。JVM調(diào)優(yōu)的目標(biāo)是優(yōu)化
    的頭像 發(fā)表于 12-05 11:11 ?2179次閱讀

    什么場(chǎng)景需要jvm調(diào)優(yōu)

    JVM調(diào)優(yōu)是指對(duì)Java虛擬機(jī)進(jìn)行性能優(yōu)化和資源管理,以提高應(yīng)用程序的運(yùn)行效率和吞吐量。JVM調(diào)
    的頭像 發(fā)表于 12-05 11:14 ?1518次閱讀

    jvm調(diào)優(yōu)參數(shù)

    JVM(Java虛擬機(jī))是Java程序的運(yùn)行環(huán)境,它負(fù)責(zé)解釋Java字節(jié)碼并執(zhí)行相應(yīng)的指令。為了提高應(yīng)用程序的性能和穩(wěn)定性,我們可以調(diào)優(yōu)JVM
    的頭像 發(fā)表于 12-05 11:29 ?695次閱讀

    jvm參數(shù)的設(shè)置和jvm調(diào)優(yōu)

    JVM(Java虛擬機(jī))參數(shù)的設(shè)置和調(diào)優(yōu)對(duì)于提高Java應(yīng)用程序的性能和穩(wěn)定性非常重要。在本文中,我們將詳細(xì)介紹JVM參數(shù)的設(shè)置和
    的頭像 發(fā)表于 12-05 11:36 ?1661次閱讀

    jvm調(diào)優(yōu)主要是調(diào)哪里

    JVM調(diào)優(yōu)主要涉及內(nèi)存管理、垃圾回收、線程管理與鎖優(yōu)化等方面。下面將詳細(xì)介紹每個(gè)方面的調(diào)優(yōu)技術(shù)和
    的頭像 發(fā)表于 12-05 11:37 ?1607次閱讀

    jvm調(diào)優(yōu)常用命令

    JVM調(diào)優(yōu)是提升Java應(yīng)用性能的一個(gè)重要方面,通過(guò)合理設(shè)置JVM參數(shù)可以達(dá)到優(yōu)化應(yīng)用性能、提高
    的頭像 發(fā)表于 12-05 11:43 ?763次閱讀

    jvm調(diào)優(yōu)工具有哪些

    JVM調(diào)優(yōu)是提高Java應(yīng)用程序性能的重要手段,而JVM調(diào)優(yōu)
    的頭像 發(fā)表于 12-05 11:44 ?1166次閱讀

    鴻蒙開(kāi)發(fā)實(shí)戰(zhàn):【性能調(diào)優(yōu)組件】

    性能調(diào)優(yōu)組件包含系統(tǒng)和應(yīng)用調(diào)優(yōu)框架,旨在為開(kāi)發(fā)者提供一套性能
    的頭像 發(fā)表于 03-13 15:12 ?513次閱讀
    鴻蒙開(kāi)發(fā)實(shí)戰(zhàn):【<b class='flag-5'>性能</b><b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>組件】

    深度解析JVM調(diào)優(yōu)實(shí)踐應(yīng)用

    Tomcat自身的調(diào)優(yōu)是針對(duì)conf/server.xml中的幾個(gè)參數(shù)的調(diào)優(yōu)設(shè)置。首先是對(duì)這幾個(gè)參數(shù)的含義要有深刻而清楚的理解。
    的頭像 發(fā)表于 04-01 10:24 ?526次閱讀
    深度解析<b class='flag-5'>JVM</b><b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>實(shí)踐應(yīng)用
    百家乐任你博娱乐场| 百家乐最新打法| 家百家乐官网破解软件| 大发888娱乐平台 游戏| 网上百家乐能作弊吗| 百家乐官网最佳注码法| 普洱| 百家乐有多少种游戏| 网站百家乐官网假| 东方夏威夷娱乐| 在线水果机游戏| 百家乐赌机破解| 南京百家乐官网电| 尊博国际| 全讯网365| 百家乐8点直赢| 8运24山风水图解| 中国百家乐官网技巧| 伟博百家乐官网现金网| 爱拼娱乐城| 大发888娱乐城网址| 百家乐赌博凯时娱乐| 24山向山摆设| 虚拟百家乐官网游戏下载| 大发888娱乐场 b8| 百家乐波音独家注册送彩| 百家乐屏风| 百家乐玩法教学视频| 全迅网百家乐官网的玩法技巧和规则| 百家乐官网赌缆注码运用| 英德市| 现金轮盘游戏| 大发888线上娱乐| 百家乐全部规则| 百家乐扫描技术| 太阳城百家乐红利| 百家乐官网心术| 新思维百家乐官网投注法| 百家乐官网软件l柳州| 明升88备用| 德州扑克发牌规则|