Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化
上篇博客我們介紹了虛擬機(jī)監(jiān)控和分析命令行工具,由于其不夠直觀,不是很容易排查問(wèn)題,那么本篇博客我們就來(lái)介紹幾個(gè)可視化工具。
1、JConsole
JConsole(Java Monitoring and Management Console)是一款基于 JMX 的可視化監(jiān)視和管理的工具。它管理部分的功能是針對(duì) JMX MBean 進(jìn)行管理,MBean 可以使用代碼、中間件服務(wù)器的管理控制臺(tái)或者所有符合 JMX 規(guī)范的軟件進(jìn)行訪問(wèn)。
JMX(Java Management Extensions)是一個(gè)為應(yīng)用程序植入管理功能的框架,一套標(biāo)準(zhǔn)的代理和服務(wù);MBean就是一種規(guī)范的JavaBean,通過(guò)集成和實(shí)現(xiàn)一套標(biāo)準(zhǔn)的Bean接口。
①、啟動(dòng) JConsole
這是我們JDK自帶的監(jiān)控工具,在JDK的安裝目錄bin下即可找到。
如果配置過(guò)JDK環(huán)境變量,在CMD命令提示符中輸入 jconsole 也可直接打開(kāi)。
這是一個(gè)可執(zhí)行文件,直接雙擊即可打開(kāi)。打開(kāi)如下:
②、監(jiān)控界面介紹
JConsole 這個(gè)監(jiān)控工具可以監(jiān)控本地進(jìn)程以及遠(yuǎn)程進(jìn)程,我們這里以監(jiān)控本地進(jìn)程為例,來(lái)介紹具體的監(jiān)控界面。
點(diǎn)擊本地進(jìn)程下面的任意一欄,進(jìn)入到監(jiān)控界面。
1、監(jiān)控概覽
這個(gè)界面是我們建立本地連接后,進(jìn)入的第一個(gè)頁(yè)面。顯示的是整個(gè)虛擬機(jī)主要運(yùn)行數(shù)據(jù)的概覽,包括“堆使用情況”、“線程”、“類(lèi)”、“CPU占用率”等四項(xiàng)信息的曲線圖,這些曲線圖是后面“內(nèi)存”、“線程”、“類(lèi)”頁(yè)簽的信息匯總,下面會(huì)分別介紹這幾個(gè)頁(yè)簽。
2、內(nèi)存監(jiān)控
這個(gè)頁(yè)簽相當(dāng)于上一篇博客介紹的jstat命令,不過(guò)這里是可視化的。用于監(jiān)視虛擬機(jī)內(nèi)存的一些變化趨勢(shì)。
監(jiān)視區(qū)域如下:
3、線程監(jiān)控
這個(gè)頁(yè)簽相當(dāng)于上篇博客介紹的可視化的jstat 命令。遇到線程停頓的時(shí)候可以使用這個(gè)頁(yè)簽進(jìn)行監(jiān)控分析。
另外,此頁(yè)面左下角還有一個(gè)檢測(cè)死鎖的按鈕,出現(xiàn)線程死鎖后,點(diǎn)擊此按鈕,便會(huì)出現(xiàn)一個(gè)新的死鎖頁(yè)簽。
比如,對(duì)于如下這段死鎖代碼:
1 @GetMapping("/test2") 2 public void test2() throws Exception{ 3 Object lock1 = new Object(); 4 Object lock2 = new Object(); 5 6 new Thread(()->{ 7 synchronized (lock1){ 8 try { 9 Thread.sleep(1000); 10 } catch (InterruptedException e) { 11 e.printStackTrace(); 12 } 13 synchronized (lock2){ 14 System.out.println("線程1結(jié)束運(yùn)行"); 15 } 16 } 17 }).start(); 18 19 new Thread(()->{ 20 synchronized (lock2){ 21 try { 22 Thread.sleep(1000); 23 } catch (InterruptedException e) { 24 e.printStackTrace(); 25 } 26 synchronized (lock1){ 27 System.out.println("線程2結(jié)束運(yùn)行"); 28 } 29 } 30 }).start(); 31 }這里創(chuàng)建了兩把鎖,lock1,lock2,創(chuàng)建了兩個(gè)線程,線程1獲取到lock1后,說(shuō)你給我lock2,我就釋放lock1;而線程2獲取到lock2后,說(shuō)你給我lock1,我就釋放lock2。兩個(gè)線程誰(shuí)也不釋放,于是便造成了死鎖現(xiàn)象。
通過(guò)監(jiān)控工具便可以檢測(cè)到,如下:
4、類(lèi)監(jiān)控
5、VM概要
展示一些JVM信息。
③、配置Tomcat遠(yuǎn)程監(jiān)控
? 其實(shí)使用監(jiān)控工具,我們很少對(duì)本地的程序進(jìn)行監(jiān)控,大多數(shù)情況都是對(duì)部署在遠(yuǎn)程Linux服務(wù)器上的程序進(jìn)行監(jiān)控,那么想要使用 JConsole這款工具進(jìn)行遠(yuǎn)程監(jiān)控,我們必須要進(jìn)行一些配置。我們首先介紹對(duì)Tomcat的遠(yuǎn)程監(jiān)控。
1、配置catalina.sh
在該文件下加入如下配置信息:
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.146.200 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"-Dcom.sun.management.jmxremote 表示開(kāi)啟遠(yuǎn)程連接。
-Dcom.sun.management.jmxremote.port=9004 表示設(shè)置遠(yuǎn)程連接端口為1099
-Dcom.sun.management.jmxremote.authenticate=false 表示不需要密碼驗(yàn)證
-Dcom.sun.management.jmxremote.ssl=fals 表示不需要開(kāi)啟ssl連接
-Djava.net.preferIPv4Stack=true 表示只支持IPV4地址
-Djava.rmi.server.hostname=192.168.146.200 表示監(jiān)控的主機(jī)名為192.168.146.200
添加位置如下:
?
2、建立連接
通過(guò)上面的配置,啟動(dòng)Tomcat后,我們只需要在 JConsole 的遠(yuǎn)程連接界面,輸入 192.168.146.200:9004 ,然后點(diǎn)擊連接即可。
3、連接錯(cuò)誤情況
如果無(wú)法連接,需要依次檢測(cè)如下信息:
①、配置的端口不能被占用,可以通過(guò) netstat -tunlp|grep 1099 命令驗(yàn)證。
②、防火墻開(kāi)啟對(duì)上面設(shè)置端口的信任
③、通過(guò) hostname -i 命令,如果打印的不是前面設(shè)置的ip地址,則需要通過(guò) vim /etc/hosts 命令,將127.0.0.1 修改為本機(jī)IP地址。
④、配置遠(yuǎn)程jar包監(jiān)控
啟動(dòng)jar包的命令如下:
nohup java -Djava.rmi.server.hostname=192.168.146.200 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1089 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar jvm-0.0.1-SNAPSHOT.jar &配置端口,ip地址,和遠(yuǎn)程監(jiān)控Tomcat大體上是一樣的,然后建立連接即可。
?2、JVisualVM
英文介紹為 All-in-One Java Troubleshooting Tool。聽(tīng)名字我們就知道這是一塊功能很全,很強(qiáng)大的Java運(yùn)行監(jiān)視和故障處理工具,并且是官方主力發(fā)展的虛擬機(jī)故障處理工具,其性能分析比很多專(zhuān)業(yè)收費(fèi)軟件都不會(huì)遜色多少。
①、啟動(dòng) JVisualVM
和前面介紹的JConsole工具一樣,這也是 JDK 自帶的一個(gè)工具,在安裝目錄bin下,可以直接雙擊啟動(dòng)。
打開(kāi)界面如下:
②、監(jiān)控界面介紹
其實(shí)大體界面和JConsole差不多。
抽樣器可以對(duì)CPU,內(nèi)存進(jìn)行詳細(xì)監(jiān)控統(tǒng)計(jì)。
③、插件機(jī)制
JVisualVM 比較強(qiáng)大的地方在與可以安裝各種插件,提供各種不同的功能。
點(diǎn)擊上方菜單欄 工具---》插件:
然后設(shè)置插件中心的地址:
這個(gè)地址,我們可以到這個(gè)網(wǎng)址上去獲取:
https://visualvm.github.io/pluginscenters.html
選擇對(duì)應(yīng)的插件地址時(shí),要根據(jù)我們的JDK版本來(lái)選定。
比如,我這邊的JDK版本如下:
那么選擇的地址如下(152,介于131-221之間):
設(shè)置好下載地址后,我們這邊選擇需要的插件,點(diǎn)擊安裝即可!比如比較常用的插件 Visual GC(用來(lái)查看GC日志)
? 安裝完成之后,我們便可以在頁(yè)簽上看到這個(gè)新增的插件。
④、配置遠(yuǎn)程連接
不管是遠(yuǎn)程連接Tomcat還是jar包,都和介紹JConsole一模一樣,詳情請(qǐng)參考上面的配置。
⑤、使用文檔
對(duì)于JVisualvm,官方有詳細(xì)的中文文檔說(shuō)明,如下:
https://visualvm.github.io/documentation.html
轉(zhuǎn)載于:https://www.cnblogs.com/ysocean/p/11415514.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java虚拟机详解(七)------虚拟
- 下一篇: java异常_Java的异常体系