一伏尼、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應用
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仅财,則會出現以下錯誤
添加對應的啟動配置后,啟動應用碗淌。
例如下圖所示:
啟動應用后盏求,檢查應用是否正常啟動抖锥,并且檢查對應tcp端口是否正常:
然后,通過點擊JMC控制臺的菜單打開并創(chuàng)建遠程連接碎罚。操作如下:
1磅废、文件
2、連接
3荆烈、創(chuàng)建新連接
4拯勉、配置遠程ip和port
5、測試連接
6憔购、完成宫峦,進入控制臺頁面
3、JMX應用使用
右鍵對應jvm應用玫鸟,可以看到以下選項
- 啟動JMX控制臺
- 啟動飛行記錄(JFR-java flight record)
- 遠程控制JMX代理
- 屬性
3.1导绷、使用應用- 屬性
如上圖所示:可查看jvm應用的啟動main類、進程pid屎飘、連接名稱妥曲。
3.2、使用應用- JMX控制臺
打開jmx控制臺后钦购,應用右邊默認進入概況視圖檐盟。接下來介紹JMX控制的使用。
-
概況
通過概況可以查看以下信息:
處理器
信息 | 說明 |
---|---|
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瀏覽器
Mbean是jvm可提供給JMC控制臺的系統信息陌宿,這些Bean的狀態(tài)有可能會跟隨系統的運行而變化的〔ǚ幔可根據自己需要關注的Mbean信息壳坪,添加到自己創(chuàng)建視圖。
-
觸發(fā)器
通過觸發(fā)器方便對系統一個狀態(tài)閾值進行監(jiān)控提醒掰烟。
-
系統
通過系統視圖爽蝴,可以查看jvm應用的配置信息,可以通過名稱過濾查看java的的屬性纫骑,例如:java.class. 可以查看java 應用配置類路徑蝎亚。
-
內存
通過內存視圖查看堆直方圖(不懂什么意思),
gc表的信息先馆,比較重要发框。 -
線程
可以通過線程篩選進行cpu使用率分析、棧使用率分析
選中線程的堆棧跟蹤煤墙,可以清楚看到執(zhí)行過程 -
診斷
4梅惯、飛行記錄器
一分鐘后可查看記錄數據宪拥,通過這些數據,可以清楚的了解到這一分鐘時間內铣减,整個操作系統以及JVM的所有數據情況她君。