JVM監(jiān)控與調優(yōu):利用JMC進行性能分析

一伏尼、Java Mission Control簡介

1翔横、前言

官方文檔:https://docs.oracle.com/javacomponents/jmc-5-5/jmc-user-guide/intro.htm#JMCCI109

Java Mission Control使您能夠監(jiān)視和管理Java應用程序,而不會引入通常與這些類型的工具相關聯的性能開銷率碾。它使用為Java虛擬機(JVM)的常規(guī)自適應動態(tài)優(yōu)化收集的數據。除了最小化性能開銷之外,這種方法還消除了觀察器效應的問題愕鼓,當監(jiān)視工具改變系統的執(zhí)行特性時會發(fā)生這種問題。

Java Mission Control由客戶端應用程序(JMC客戶端)和在其上運行的許多插件組成:

JVM Browser顯示正在運行的Java應用程序及其JVM慧起。每個JVM實例都稱為JVM連接菇晃。

JMX Console連接到正在運行的JVM,實時收集和顯示其特征蚓挤,并允許您通過Managed Beans(MBean)更改某些運行時屬性磺送。您還可以創(chuàng)建觸發(fā)某些事件的規(guī)則(例如驻子,如果應用程序的CPU使用率達到90%,則發(fā)送電子郵件)估灿。

Java Flight Recorder(JFR)收集并保存詳細的性能特征崇呵,以進行歷史分析和分析。它可以用作獨立的性能監(jiān)視和分析工具馅袁,但是當用作JMC客戶端的插件時域慷,它會在邏輯分組的表,圖表和撥號中顯示診斷信息汗销。它使您可以選擇專注于問題所需的時間范圍和詳細程度犹褒。

Java Mission Control插件使用Java Management Extensions(JMX)代理連接到JVM。

2弛针、啟動介紹

JMC客戶端可執(zhí)行文件位于binJava SE Development Kit(JDK)安裝路徑(JAVA_HOME)的目錄中叠骑。如果JAVA_HOME/bin目錄位于PATH環(huán)境變量中,則可以通過jmc在命令行提示符(shell)中輸入來啟動JMC客戶端削茁。否則座云,您必須指定JMC可執(zhí)行文件的完整路徑:
JAVA_HOME\bin\jmc.exe
JAVA_HOME/bin/jmc (Linux,OS X)

注意:
1付材、在Windows上朦拖,JMC客戶端可執(zhí)行文件的快捷方式將添加到“ 開始”菜單中“ 所有程序”下的“ Java Development Kit”文件夾中。
2厌衔、在OS X上璧帝,如果在Spotlight中找不到JMC可執(zhí)行文件或找到JMC,則可以使用/Library/Java/JavaVirtualMachines/jdk<版本從命令行啟動JMC >.jdk/Contents/Home/bin/jmc富寿〔橇ィ或者,使用Finder瀏覽到/Library/Java/JavaVirtualMachines/jdk<版本页徐,>.jdk/Contents/Home/lib/missioncontrol然后雙擊Java Mission Control應用程序苏潜。
3、在OS X上变勇,當您啟動JMC可執(zhí)行文件時恤左,將打開“終端”窗口。當您關閉JMC客戶端時搀绣,終端會留下文本[Process completed]飞袋。要避免這種情況,請打開“終端首選項”链患,然后打開“ 設置”選項卡巧鸭,選擇您使用的方案,然后選擇“ Shell”選項卡麻捻,如果shell干凈地退出纲仍,則將“shell退出時”選項更改為“ 關閉”呀袱。

3、將JVM選項傳遞給JMC Launcher

JMC是一個Java應用程序郑叠,JMC客戶端可執(zhí)行文件是此應用程序的啟動程序夜赵。JMC啟動由jmc.ini文件中指定的選項控制,該選項位于JAVA_HOME/bin目錄中锻拘。參數給-vmargs的選項中的jmc.ini文件是傳遞到運行JMC應用JVM選項。您可以指定這些選項來控制此JVM的運行方式击蹲。如果您不想修改該jmc.ini文件署拟,可以在命令行上指定JVM選項作為-vmargs該jmc命令選項的參數。

注意:
如果為該jmc命令指定了其他選項歌豺,則-vmargs必須最后指定該選項推穷。
要使用您自己的一組JVM選項啟動JMC客戶端(覆蓋jmc.ini文件中指定的那些選項),請運行以下命令(使用空格分隔多個參數):

jmc -vmarg 參數

要使用其他JVM選項啟動JMC客戶端(將它們附加到jmc.ini文件中指定的選項)类咧,請運行以下命令(使用空格分隔多個參數):

jmc --launcher.appendVmargs -vmarg 參數

使用工作區(qū)目錄

如果要將JMC客戶端的設置復制到另一臺計算機或其他用戶馒铃,或者為不同的應用程序使用不同的預定義設置,請在啟動JMC客戶端時添加-data命令行選項并定義工作空間目錄:
jmc -data workspace-directory


二痕惋、使用案例

1区宇、啟動JMC應用

打開cmd窗口,輸入jmc命令值戳,會打開jmc應用


image.png
2议谷、進入JMC控制臺

可以看到jmc默認展示本地的jvm應用 ,也可以連接遠程jvm應用堕虹。但是我們的應用一般跑在服務器卧晓,需要使用遠程連接到jvm應用上。
遠程連接應用
例如赴捞,遠程啟動一個spring boot web服務逼裆,修改start.sh啟動腳本文件,添加對應配置:

 -Dcom.sun.management.jmxremote.port=7001
 -Dcom.sun.management.jmxremote 
 -Dcom.sun.management.jmxremote.authenticate=false 
 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=your ip

并且可以加以下參數赦政,開啟JFR調試胜宇,UnlockCommercialFeatures 代表啟用商用特性,官方文檔中說恢着,生產環(huán)境使用需要授權掸屡,可忽略提示使用。

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

如何不加參數或者java版本過低然评,點擊啟動JFR仅财,則會出現以下錯誤


image.png

添加對應的啟動配置后,啟動應用碗淌。
例如下圖所示:


image.png

啟動應用后盏求,檢查應用是否正常啟動抖锥,并且檢查對應tcp端口是否正常:


image.png

然后,通過點擊JMC控制臺的菜單打開并創(chuàng)建遠程連接碎罚。操作如下:
1磅废、文件
2、連接

3荆烈、創(chuàng)建新連接
4拯勉、配置遠程ip和port
5、測試連接
6憔购、完成宫峦,進入控制臺頁面


image.png
3、JMX應用使用

右鍵對應jvm應用玫鸟,可以看到以下選項

  • 啟動JMX控制臺
  • 啟動飛行記錄(JFR-java flight record)
  • 遠程控制JMX代理
  • 屬性

3.1导绷、使用應用- 屬性

image.png

如上圖所示:可查看jvm應用的啟動main類、進程pid屎飘、連接名稱妥曲。
3.2、使用應用- JMX控制臺
打開jmx控制臺后钦购,應用右邊默認進入概況視圖檐盟。接下來介紹JMX控制的使用。

  • 概況


    image.png

    通過概況可以查看以下信息:
    處理器

信息 說明
JVM CPU Usage jvm cpu使用率
Machine CPU Usage 系統cpu使用率

內存

信息 說明
Committed Java Head 提交java堆大小
Maxinum Java Heap 最大的java 堆大小
Total Physical Memory 服務器物理內存總和
Used Java Heap Memory java堆內存使用大小
Used Physical Memory 服務器物理內存使用大小

同時還可以定制自己關注視圖押桃,在概況的右邊有+號添加對應視圖遵堵。創(chuàng)建自己視圖后,可以通過該視圖菜單欄的+按鈕添加對應Mbean信息怨规。

  • Mbean瀏覽器


    image.png

    Mbean是jvm可提供給JMC控制臺的系統信息陌宿,這些Bean的狀態(tài)有可能會跟隨系統的運行而變化的〔ǚ幔可根據自己需要關注的Mbean信息壳坪,添加到自己創(chuàng)建視圖。

  • 觸發(fā)器


    image.png

    通過觸發(fā)器方便對系統一個狀態(tài)閾值進行監(jiān)控提醒掰烟。

  • 系統


    image.png

    通過系統視圖爽蝴,可以查看jvm應用的配置信息,可以通過名稱過濾查看java的的屬性纫骑,例如:java.class. 可以查看java 應用配置類路徑蝎亚。

  • 內存


    image.png

    通過內存視圖查看堆直方圖(不懂什么意思),
    gc表的信息先馆,比較重要发框。

  • 線程


    image.png

    可以通過線程篩選進行cpu使用率分析、棧使用率分析
    選中線程的堆棧跟蹤煤墙,可以清楚看到執(zhí)行過程

  • 診斷


    image.png
4梅惯、飛行記錄器
image.png

image.png

image.png

一分鐘后可查看記錄數據宪拥,通過這些數據,可以清楚的了解到這一分鐘時間內铣减,整個操作系統以及JVM的所有數據情況她君。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市葫哗,隨后出現的幾起案子缔刹,更是在濱河造成了極大的恐慌,老刑警劉巖劣针,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件校镐,死亡現場離奇詭異,居然都是意外死亡酿秸,警方通過查閱死者的電腦和手機灭翔,發(fā)現死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門魏烫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辣苏,“玉大人,你說我怎么就攤上這事哄褒∠◇” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵呐赡,是天一觀的道長退客。 經常有香客問我,道長链嘀,這世上最難降的妖魔是什么萌狂? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮怀泊,結果婚禮上茫藏,老公的妹妹穿的比我還像新娘。我一直安慰自己霹琼,他們只是感情好务傲,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枣申,像睡著了一般售葡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忠藤,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天挟伙,我揣著相機與錄音,去河邊找鬼模孩。 笑死像寒,一個胖子當著我的面吹牛烘豹,可吹牛的內容都是我干的。 我是一名探鬼主播诺祸,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼携悯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了筷笨?” 一聲冷哼從身側響起憔鬼,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胃夏,沒想到半個月后轴或,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡仰禀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年照雁,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片答恶。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡饺蚊,死狀恐怖,靈堂內的尸體忽然破棺而出悬嗓,到底是詐尸還是另有隱情污呼,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布包竹,位于F島的核電站燕酷,受9級特大地震影響,放射性物質發(fā)生泄漏周瞎。R本人自食惡果不足惜苗缩,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望声诸。 院中可真熱鬧酱讶,春花似錦、人聲如沸双絮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囤攀。三九已至软免,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焚挠,已是汗流浹背膏萧。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人榛泛。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓蝌蹂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親曹锨。 傳聞我的和親對象是個殘疾皇子孤个,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內容