java開發(fā)中如何使用JVisualVM進(jìn)行性能分析
JVisualVM是由Sun提供的性能分析工具,如此強(qiáng)大的后盾怎能不強(qiáng)大?在Jdk6.0以后的版本中是自帶的,配置好環(huán)境變量然后在運(yùn)行中輸入“JVisualVm”或直接到Jdk的安裝目錄的Bin目錄下找到運(yùn)行程序即可運(yùn)行。如果是用Jdk1.5或以前版本的朋友就得要單獨(dú)安裝了。
我覺得其還有一個(gè)強(qiáng)大的地方就是不需要用代理啟動(即如果要監(jiān)視某個(gè)程序則需要用測試軟件來運(yùn)行程序方便其監(jiān)視如YourKit這款同類的測試工具)的方式來運(yùn)行,十分方便,只要是用Jdk環(huán)境運(yùn)行的,打開此測試工具后即能看到并監(jiān)視程度的運(yùn)行狀態(tài),當(dāng)然前提是要運(yùn)行在同一個(gè)Jdk的環(huán)境中。
地址:https://visualvm.dev.java.net/
連接
1、本地機(jī)器的程序直接可以監(jiān)聽到
2、遠(yuǎn)程機(jī)器的程序需要加上JVM參數(shù)
-Dcom.sun.management.jmxremote= true
-Dcom.sun.management.jmxremote.port= 9090
-Dcom.sun.management.jmxremote.ssl= false
-Dcom.sun.management.jmxremote.authenticate= false
備注:另外需要檢查
hostname –i
看解析出來是否為本地的IP,如是127.0.0.1或者IP為多個(gè)IP中之一,則其他的IP無效,會連接不上。
這里有個(gè)分析案例,利用jvisualvm分析tomcat的問題:
http://blog.tty.nl/2010/09/03/using-visualvm-to-fix-live-tomcat-and-jvm-problems
插件安裝
tools->plugin->Available Plugin 會有值得安裝的插件,如:VisualGC JConsole

插件列表:https://visualvm.dev.java.net/plugins.html
注意:上面提供的端口配置有些麻煩,不如直接這樣做:
要使用 VisualGC 必須在遠(yuǎn)程機(jī)上啟動jstatd代理程序,否則會顯示 “not supported for this jvm” 錯(cuò)誤
而啟動 jstatd 時(shí)會有一個(gè)權(quán)限問題,需要做如下修改:
nano /opt/sun-jdk- 1.6 . 0.26 /jre/lib/security/java.policy
nano /opt/sun-jdk-1.6.0.26/jre/lib/security/java.policy
增加下列行
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
然后啟動 jstatd并且不要關(guān)閉
如:

Threads

查看線程的運(yùn)行情況,運(yùn)行、停止、睡眠、等待,根據(jù)這些結(jié)合實(shí)際程序運(yùn)行的邏輯分析。
找到可疑份子,可以Thread Dump 找出具體是哪個(gè)線程在作祟。
參看這個(gè)例子:http://blog.tty.nl/2010/09/03/using-visualvm-to-fix-live-tomcat-and-jvm-problems
profile
關(guān)于如何使用,如何分析程序,可以參看這個(gè)例子:http://www.baptiste-wicht.com/2010/07/profile-applications-java-visualvm
相關(guān)文章
IDEA的Mybatis Log Plugin插件配置和使用詳解
這篇文章主要介紹了IDEA的Mybatis Log Plugin插件配置和使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
java根據(jù)當(dāng)前時(shí)間獲取yyyy-MM-dd?HH:mm:ss標(biāo)準(zhǔn)格式的時(shí)間代碼示例
在Java中可以使用java.time包中的LocalDateTime類和DateTimeFormatter類來獲取并格式化當(dāng)前時(shí)間為yyyy-MM-dd?HH:mm:ss的格式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10
Java函數(shù)接口和Lambda表達(dá)式深入分析
這篇文章主要介紹了Java函數(shù)接口和Lambda表達(dá)式,函數(shù)接口是一個(gè)具有單個(gè)抽象方法的接口,接口設(shè)計(jì)主要是為了支持Lambda表達(dá)式和方法引用,使得Java能更方便地實(shí)現(xiàn)函數(shù)式編程風(fēng)格,需要的朋友可以參考下2025-04-04
SpringBoot整合flyway實(shí)現(xiàn)自動創(chuàng)建表的方法
這篇文章主要介紹了SpringBoot整合flyway實(shí)現(xiàn)自動創(chuàng)建表的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03

