IDEA安裝使用 VisualVM 及VisualVM 遠程監視


1. VisualVM是什么

按照VisualVM官網(http://visualvm.github.io/)上的介紹,VisualVM是一個集成命令行JDK工具和輕量級分析功能的可視化工具。專為開發和生產時間使用而設計。

我們在jdk安裝包中也可以發現它

2. IDEA安裝VisualVM插件

File-> Setting-> Plugins -> Browers Repositrories 搜索VisualVM Launcher安裝並重啟IDEA。

出現上圖中的兩個按鈕即為安裝成功,當我們通過他們啟動項目時,會自動打開VisualVM控制台面板。

3. VisualVM本地使用

右側有概述(Overview)、監視(Monitor)、線程(Threads)、抽樣器(Sampler)幾個標簽,其中

  • 概述中可以看到程序的基本信息和啟動參數、環境變量等等;
  • 監視是幾個折線圖,用於顯示CPU、內存(分為Heap和Metaspace)、類和線程的使用情況或者數量,另外還包括執行垃圾回收和對堆 Dump的快捷功能;
  • 線程可詳細查看每個線程的運行時間及狀態等;
  • 抽樣器可對CPU和內存進行一段時長的取樣,從而對應用程序進行分析。

使用時,可通過監視中的各個折線圖查看系統的變化,如果執行某段程序時,某個指標出現突然增大等問題,同時程序運行也出現問題,可進入到該面板做細致檢查。

如果某段程序執行時CPU飆升或者內存溢出,此時排除系統性能原因,多半是由於低效的代碼或者不合理的堆空間分配引起,可以在復現該問題的同時到抽樣器面板進行抽樣,從而確定應該優化哪個方法或者分配多大內存。

當對一個多線程應用程序進行調試或者開發后期做性能調優的時候,往往需要了解當前程序中所有線程的運行狀態,是否有死鎖、熱鎖等情況的發生,從而分析系統可能存在的問題。在 VisualVM 的監視標簽和線程標簽內,我們可以查看當前應用程序中所有活動線程(Live threads)和守護線程(Daemon threads)的數量等實時信息。

具體使用方法很直觀,不再一一介紹,如果要進行測試,可參考該篇博客:http://www.cnblogs.com/wade-xu/p/4369094.html 

4. 遠程監視

在實際工作中,需要在本機監控的生產環境下的jvm,Visualvm目前支持兩種remote connection方式,分別是jstatd和JMX方式: 這里主要介紹的是通過JMX方式.。

4.1 修改遠程jvm配置

進入JAVA_HOME\jre\lib\management\,拷貝一份jmxremote.password.template 並改名為 jmxremote.password到當前目錄,並去掉# monitorRole  QED 和 # controlRole  R&D 這兩行前面的注釋符號。

 

[root@izbp1cq2wdg9kxunr0sz02z ~]# cd /usr/java/jdk/jdk1.8.0_172/jre/lib/management
[root@izbp1cq2wdg9kxunr0sz02z management]# cp jmxremote.password.template jmxremote.password
[root@izbp1cq2wdg9kxunr0sz02z management]# ls
jmxremote.access  jmxremote.password  jmxremote.password.template  management.properties  snmp.acl.template
[root@izbp1cq2wdg9kxunr0sz02z management]# vim jmxremote.password
[root@izbp1cq2wdg9kxunr0sz02z management]# chmod 600 jmxremote.password
[root@izbp1cq2wdg9kxunr0sz02z management]# chown root jmxremote.password

我這里使用的是默認的兩個遠程控制賬號,如果在 jmxremote.password 中自定義了遠程登錄賬號和密碼,需要修改同目錄下的jmxremote.access 文件,該文件可以控制訪問權限。

4.2 修改遠程機器上需要被監控的程序的配置文件 

我這里是監控Tomcat容器內部署的應用

修改TOMCAT_HOME/bin/catalian.sh文件,添加

export JAVA_OPTS="-Djava.rmi.server.hostname=47.xx.xxx.xx1 -Dcom.sun.management.jmxremote.port=18999  -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"

詳細參數如下

 參數 描述
com.sun.management.jmxremote true / false. Default is true
com.sun.management.jmxremote.port Port number. No default.
com.sun.management.jmxremote.ssl true / false. Default is true.
com.sun.management.jmxremote.ssl.enabled.protocols Default SSL/TLS protocol version.
com.sun.management.jmxremote.ssl.enabled.cipher.suites Default SSL/TLS cipher suites.
com.sun.management.jmxremote.ssl.need.client.auth true / false. Default is false
com.sun.management.jmxremote.authenticate true / false.Default is true
com.sun.management.jmxremote.password.file JRE_HOME/lib/management/jmxremote.password
com.sun.management.jmxremote.access.file JRE_HOME/lib/management/jmxremote.access
com.sun.management.jmxremote.login.config Default login configuration is a file-based password authentication

重啟tomcat。

可以用 netstat -anp| grep 18999 ,查看守護線程是否已經啟動。

4.3 VisualVM配置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM