如何使用JDK自带jvisualvmjdk性能监控工具具

使用JDK自带jvisualvm监控tomcat和java程序 - 推酷
使用JDK自带jvisualvm监控tomcat和java程序
在jdk目录下的bin目录中可以找到jvisualvm.exe文件、直接启动可以看到如下界面:
以上是已经连接远程的界面。直观的监控界面、更有助于我们分析tomcat的运行情况。
下面主要介绍下怎么样使用本地 jvisualvm监控远程tomcat。
下面是我的配置方法:
在tomcat/bin目录下打开startup.sh或者startup.bat,在最后一行前面加上,也就是:
exec &$PRGDIR&/&$EXECUTABLE& start &$@&
&span style=&font-size:18&&export CATALINA_OPTS=&$CATALINA_OPTS
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.1.10
-Dcom.sun.management.jmxremote.port=10002 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false&&/span&
参数说明:
&span style=&font-size:18&&指定了JMX启动的代理端口,这个端口就是visualvm要连接的端口(10002端口不能被别的程序使用netstat -an|gerp 10002)
Dcom.sun.management.jmxremote.port=10002
指定了JMX是否启用ssl
Dcom.sun.management.jmxremote.authenticate=false
指定了JMX是否启用鉴权(需要用户名,密码鉴权)
Dcom.sun.management.jmxremote.authenticate=false
指定了服务器主机名
Djava.rmi.server.hostname=192.168.1.10&/span&
配置JMX访问文件 增加下面内容
&span style=&font-size:18&&export CATALINA_OPTS=&$CATALINA_OPTS
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.1.10
-Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access -Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password&&/span&
# cd $CATALINA_HOME/conf/ # cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.password # chmod 700 jmxremote.password&&& (一定注意这个文件默认是不可写的) # vi $CATALINA_HOME/conf/jmxremote.password 在最下面添加一个用户(第一个是用户名 第二个是密码) jiu & & & &123456 # chmod 400 jmxremote.password&&& (要求该文件是任何用户均不可写的) # cp $JAVA_HOME/jre/lib/management/jmxremote.access jmxremote.access # vi jmxremote.access&&& (该文件是对jmx用户的授权) 到最后一行 将 monitorRole&& readonly controlRole&& readwrite 注释 更改为 # monitorRole&& readonly # controlRole&& readwrite 然后在最后添加一行 jiu & &readwrite
# chmod 400 jmxremote.access
如果没有这一步、使用startup启动不了tomcat。
按照上述配置、再使用startup.sh启动tomcat。
这里特别注意要开放10002自己设置的端口。
打开防火墙,使外部能访问&
/etc/init.d/iptables status
/sbin/iptables -I INPUT -p tcp --dport 100002 -j ACCEPT #开启10002端口&
/etc/rc.d/init.d/iptables save #保存配置&
/etc/rc.d/init.d/iptables restart #重启服务&
如果 链接不上可以先关闭防火墙测试一下
/etc/init.d/iptables stop
接下来就是使用 jvisualvm来远程监控tomcat了
右键点击远程-添加远程主机-输入主机ip地址
添加远程主机之后,点击远程主机右键-添加jmx连接:
弹出登录框
输入主机名:端口号,如果配置了用户名和密码,请输入用户名和密码。然后点击确定。
点击确定之后、在远程主机下会有一个jmx连接,打开连接,点击监视tab,可以看到如下界面了。
在上图中可以看到cpu利用率和垃圾回收活动(这个在分析tomcat性能时也很重要)。然后是堆栈使用情况。 下面是类的使用情况,最后一个是线程活动情况。
点击线程tab可以看到:
上图可以非常清晰的看到线程活动情况,那些线程正在执行,哪些线程正在等待中,以及执行完毕的线程等。
这里可以看到每个线程的状态,点击某个线程右键可以查看该线程的详细情况:
使用左上角的线程dump按钮,还可以看到线程的堆栈情况,这样就可以具体分析线程是在什么地方进入等待,什么地方进入休眠,以及什么地方一直处于执行状态。这也是一个性能分析利器哦!
监控服务器上的java程序
相较于监控tomcat要麻烦很多,要预先启动jstatd服务(${java_home}/bin目录下)
jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI(Remote Method Invocation,远程方法调用)服务器程序,它是一个Daemon程序(后台进程),要保证远程监控软件连接到本地的话需要jstatd始终保持运行。
jstatd运行需要通过-J-Djava.security.policy=***指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy(我放在了${java_home}/bin目录下),文件内容如下:
grant&codebase&&file:/usr/java/jdk1.7.0_79/lib/tools.jar&&{&&&
&&&&permission&java.security.AllP&&&
然后使用这个策略文件启动jstatd服务
[root@localhost bin]# pwd&&
/usr/java/jdk1.7.0_79/bin
[root@localhost bin]$&./jstatd&-J-Djava.security.policy=./jstatd.all.policy&&&&
因为监控的过程中需要jstatd服务一直运行,所以加上了&,如果需要日志也可使用:
./jstatd&-J-Djava.security.policy=./jstatd.all.policy&-J-Djava.rmi.server.logCalls=true&&
接下来就可以在jvisualvm中配置监控该服务器上运行的java程序了,和在jvisualvm中配置监控tomcat服务器的操作过程是一样的
需要特别注意的是,有时在配置远程监控java程序的时候jvisualvm会报一个错误
点击查看错误详情:
connection refused to host:127.0.0.1初步判断和主机名有关系
[root@localhost bin]#&hostname&-i&&
127.0.0.1&&
[root@localhost bin]#&hostname&192.168.1.10 &
修改完重启jstatd服务( 网上很多人说要修改主机的/etc/hosts文件,但是我自己测试修改/etc/hosts文件是没有效果的,必须要修改主机名 )
填写主机名:
这里要选添加一个jstatd连接:
直接选择默认配置即可(默认使用1099端口):
点击ok后,168上的所有java程序就会自动列出:
jvisualvm也是可以安装插件的,具体步骤为tool -& plugin -&aviable plugin,推荐一个非常好用的插件VisualGC
安装完这个插件后,将会增加新的监控条目Visual GC,可以看到虚拟机内存各个区的使用情况
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致> 博客详情
jdk自带有个jvisualvm工具、该工具是用来监控java运行程序的cpu、内存、线程等的使用情况。并且使用图表的方式监控java程序、还具有远程监控能力。不失为一个用来监控tomcat的好工具。
在jdk目录下的bin目录中可以找到jvisualvm.exe文件、直接启动可以看到如下界面:
以上是已经连接远程的界面。直观的监控界面、更有助于我们分析tomcat的运行情况。
下面主要介绍下怎么样使用本地jvisualvm监控远程tomcat。
tomcat自带的监控介绍可以参考:
下面是我的配置方法:
&在tomcat/bin目录下打开startup.sh或者startup.bat,在最后一行前面加上,也就是:
exec "$PRGDIR"/"$EXECUTABLE" start "$@"
export CATALINA_OPTS="$CATALINA_OPTS&
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
-Dcom.sun.management.jmxremote.port=xxx -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"
参数说明:
-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx 主机地址,我配置的是外网地址
-Dcom.sun.management.jmxremote.port=xxx
端口号、配置完端口号之后需要将此端口开放出来
可以使用命令:iptables -A INPUT -p tcp --d port &端口号 -j ACCEPT
-Dcom.sun.management.jmxremote.authenticate=true 是否开启认证、false的时候可以不使用密码访问
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
以上配置是开启认证时使用的access文件和password文件 其中jmxremote.access文件的内容可以配置为:
username1 readonly
username2 readwrite
jmxremote.password文件可以配置为:
username1 password1
username2 password2 将以上俩文件放在对应配置目录tomcat/conf/下
并且将以上俩个文件访问权限配置成:
chmod 600 jmx* 如果没有这一步、使用startup启动不了tomcat。
按照上述配置、再使用startup.sh启动tomcat。
接下来就是使用jvisualvm来远程监控tomcat了
右键点击远程-添加远程主机-输入主机ip地址
添加远程主机之后,点击远程主机右键-添加jmx连接:
弹出登录框
输入主机名:端口号,如果配置了用户名和密码,请输入用户名和密码。然后点击确定。
点击确定之后、在远程主机下会有一个jmx连接,打开连接,点击监视tab,可以看到如下界面了。
在上图中可以看到cpu利用率和垃圾回收活动(这个在分析tomcat性能时也很重要)。然后是堆栈使用情况。下面是类的使用情况,最后一个是线程活动情况。
点击线程tab可以看到:
上图可以非常清晰的看到线程活动情况,那些线程正在执行,哪些线程正在等待中,以及执行完毕的线程等。
这里可以看到每个线程的状态,点击某个线程右键可以查看该线程的详细情况:
使用左上角的线程dump按钮,还可以看到线程的堆栈情况,这样就可以具体分析线程是在什么地方进入等待,什么地方进入休眠,以及什么地方一直处于执行状态。这也是一个性能分析利器哦!
以上就是使用jvisualvm的jmx远程监控tomcat的简单配置。
人打赏支持
开源马克杯
领取时间:
开源马克杯是开源中国定制的“高大上”Coders 喝水利器!
领取条件:购买或拥有开源马克杯的OSCer可领取
领取时间:
开源中国倾力打造的一款写代码无bugT恤
领取条件:拥有开源T恤的OSCer可以领取
参与源创会
领取时间:
“”在线下联结了各位 OSCer,推广开源项目和理念,很荣幸有你的参与~
领取条件:参与过开源中国“源创会”的 OSCer 可以领取
码字总数 3626
一个并发池在跑,产生大量一次性对象,
端口开放了么?
端口开放了么?我端口没开发,防火墙也没关闭。现在好了 3Q
jmxremote.password
端口开放了么?我端口没开发,防火墙也没关闭。现在好了 3Q您好,请问一下,我的这个是怎么回事:有三台服务器,开放的JMX端口都是9999端口,要想都能访问到,则必须在三台上都要有配置一个Tomcat才可以,也就是说A服务器上的程序是无法访问B服务器上的服务的,但自已电脑在远程却是可以访问的,因为Tomcat装在A服务器本地上,看了博文后,我在startup.sh中配置了相关信息,但Tomcat启动报Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: server-95-187: server-95-187: Name or service not known
,万分感谢!
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区jvisualvm远程监控Tomcat(转载) - zrqlb的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
jvisualvm远程监控Tomcat(转载)
& 14:02:41
/ 个人分类:
一.Java VisualVM 概述& 对于使用命令行远程监控jvm太麻烦。在jdk1.6中提供了一个新的可视化的。JVM监控工具Java&VisualVM。jvisualvm.exe在JDK的bin目录下。&&&双击启动Java&VisualVM后可以看到窗口左侧“应用程序”栏中有“本地”、“远程”、“快照”三个项目。&“本地”下显示的是在localhost运行的程序的资源占用情况,如果本地有Java程序在运行的话启动Java&VisualVM即可看到相应的程序名,点击程序名打开相应的资源监控菜单,以图形的形式列出程序所占用的CPU、Heap、PermGen、类、线程的&统计信息。&“远程”项下列出的远程主机上的Java程序的资源占用情况,但需要在远程主机上运行jstatd守护程序&VisualVM分为3类,本地它会自动侦测到,并显示出来双击Local下的任一节点,看到右边的变化,你可以监控CPU,内存,类,线程等运行状况,实时监控服务器性能。&&右键VisualVM我们可以看到Thread&Dump,&Heap&Dump&做Thread&Dump很快,马上就可以看到结果&&Heap&Dump要稍花费一些时间(可以看到当前heap里对象的数量及占用的比例,做OOM很好用)&&&对其功能不再做描述,可以查阅网上相关质量,我们主要讲的是如何使用VisualVM远程监控。二.使用visualvm 远程监控 JVM&1.环境Ubuntu&Server&10.01&2.&在服务器上安装jstatd组件使用apt-get命令安装openjdk即可:&Java代码&sudo&apt-get&install&openjdk-6-jdk&&sudo apt-get install openjdk-6-jdk&3.在服务器上配置jstatd的security&policy文件&& jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI(Remote&Method&Invocation,远程方法调用)服务器程序,它是一个Daemon程序,要保证远程监控软件连接到本地的话需要jstatd始终保持运行。&&& jstatd运行需要通过-J-Djava.security.policy=***指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy,文件内容如下:&Java代码&grant&codebase&"file:${java.home}/../lib/tools.jar"&{ &&&&&permission&java.security.AllP &&};&&grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllP
};&&4.修改服务器hosts文件中的IP地址&&& 要使Java&VisualVM成功连接到远程服务器上,服务器端应该在/etc/hosts文件中把本机地址设为本机的IP地址。使用hostname&-i命令查看,如果显示的是127.0.0.1或者与本机实际IP不一致的话,需要把/etc/hosts文件中相应的地址改为本机实际IP。&5.运行jstatd守护程序&& 由于jstatd需要保持一直运行,所以建议使用screen命令执行jstatd程序,命令如下:Java代码&screen&jstatd&-J-Djava.security.policy=jstatd.all.policy&&screen jstatd -J-Djava.security.policy=jstatd.all.policy&如果需要RMI功能的话,还可以在启动参数中加入-J-Djava.rmi.server.logCalls=true。Java代码&screen&jstatd&-J-Djava.security.policy=jstatd.all.policy&-J-Djava.rmi.server.logCalls=true&&screen jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true&&jstatd开始运行后,使用CTRL+A+D断开screen界面,回到界面。如果想切换回jstatd运行界面的话,使用screen&-r&-d命令即可。&6.通过Java&VisualVM连接到服务器监控Java程序&& 在Java&VisualVM程序窗口左侧“远程”项目右键选择“添加远程主机”,在弹出的对话框中输入远程主机的IP地址,确认提交后即可看到相应的远程主机和在上面运行的Java程序,连接成功后应该会显示Jstatd及其PID。&& 通过以上方式连接服务器发现一个问题,不能监控CPU。提示我们建立JMX,建立JMX提示要求端口号。(JMX:Java&Management&Extensions,即Java管理扩展,是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构平台、系统体系结构和&网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。而Visual&VM是通过JMX来和远程Java应用联系的)。&&7.Tomcat中配置& 下面我们为54服务器的tomcat配置jvm启动参数。在tomcat的catalina.sh中添加如下参数:Java代码&JAVA_OPTS='-Dcom.sun.management.jmxremote.port=8999&-Dcom.sun.management.jmxremote.ssl=false&-Dcom.sun.management.jmxremote.authenticate=false'&&&JAVA_OPTS='-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'&或:Java代码&JAVA_OPTS=’-Dcom.sun.management.jmxremote.port=<FONT color=#c&-Dcom.sun.management.jmxremote.ssl=false&-Dcom.sun.management.jmxremote.authenticate=false&-Djava.rmi.server.hostname=<FONT color=#c8.<FONT color=#c&&其他配置’&&JAVA_OPTS=’-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.54&&其他配置’&&&注:1.-Dcom.sun.management.jmxremote.port:这个是配置远程connection的端口号的,要确定这个端口没有被占用2.-Dcom.sun.management.jmxremote.ssl=false&指定了JMX是否启用ssl3.-Dcom.sun.management.jmxremote.authenticate=false&指定了JMX是否启用鉴权(需要用户名,密码鉴权)&& 2,3两个是固定配置,是JMX的远程服务权限的4.-Djava.rmi.server.hostname:这个是配置的IP的&&连接成功,现在我们可以远程监控服务器性能,可以配合jmeter进行了一个长时间的加压,在加压过程中重点关注了系统资源的使用情况。三.参考博客&&随笔 - 849&
文章 - 11&评论 - 178&trackbacks - 0
国内私募机构九鼎控股打造APP,来就送&20元现金领取地址:内部邀请码:C8E245J&(不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为&中国PE第一股&,市值超1000亿元。&
------------------------------------------------------------------------------------------------------------------------------------------------------------------
原文地址:&
jdk自带有个jvisualvm工具、该工具是用来监控java运行程序的cpu、内存、线程等的使用情况。并且使用图表的方式监控java程序、还具有远程监控能力。不失为一个用来监控tomcat的好工具。
在jdk目录下的bin目录中可以找到jvisualvm.exe文件、直接启动可以看到如下界面:
以上是已经连接远程的界面。直观的监控界面、更有助于我们分析tomcat的运行情况。
下面主要介绍下怎么样使用本地jvisualvm监控远程tomcat。
tomcat自带的监控介绍可以参考:
下面是我的配置方法:
&在tomcat/bin目录下打开startup.sh或者startup.bat,在最后一行前面加上,也就是:
exec&"$PRGDIR"/"$EXECUTABLE"&start&"$@"
export CATALINA_OPTS="$CATALINA_OPTS&
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx& -Dcom.sun.management.jmxremote.port=xxx -Dcom.sun.management.jmxremote.ssl=false&-Dcom.sun.management.jmxremote.authenticate=true&-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password& -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"
参数说明:
-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx 主机地址,我配置的是外网地址
-Dcom.sun.management.jmxremote.port=xxx& 端口号、配置完端口号之后需要将此端口开放出来& 可以使用命令:iptables -A INPUT -p tcp --d port &端口号 -j ACCEPT
-Dcom.sun.management.jmxremote.authenticate=true&是否开启认证、false的时候可以不使用密码访问
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access& 以上配置是开启认证时使用的access文件和password文件
其中jmxremote.access文件的内容可以配置为:
username1 readonly
username2 readwrite
jmxremote.password文件可以配置为:
username1 password1
username2 password2
将以上俩文件放在对应配置目录tomcat/conf/下
并且将以上俩个文件访问权限配置成:
chmod&600&jmx*
如果没有这一步、使用startup启动不了tomcat。
按照上述配置、再使用startup.sh启动tomcat。
接下来就是使用jvisualvm来远程监控tomcat了
右键点击远程-添加远程主机-输入主机ip地址
添加远程主机之后,点击远程主机右键-添加jmx连接:
弹出登录框
输入主机名:端口号,如果配置了用户名和密码,请输入用户名和密码。然后点击确定。
点击确定之后、在远程主机下会有一个jmx连接,打开连接,点击监视tab,可以看到如下界面了。
在上图中可以看到cpu利用率和垃圾回收活动(这个在分析tomcat性能时也很重要)。然后是堆栈使用情况。下面是类的使用情况,最后一个是线程活动情况。
点击线程tab可以看到:
上图可以非常清晰的看到线程活动情况,那些线程正在执行,哪些线程正在等待中,以及执行完毕的线程等。
这里可以看到每个线程的状态,点击某个线程右键可以查看该线程的详细情况:
使用左上角的线程dump按钮,还可以看到线程的堆栈情况,这样就可以具体分析线程是在什么地方进入等待,什么地方进入休眠,以及什么地方一直处于执行状态。这也是一个性能分析利器哦!
以上就是使用jvisualvm的jmx远程监控tomcat的简单配置。
阅读(...) 评论()利用jdk自带的强悍工具jvisualvm检测多线程的竞争 - 为程序员服务
利用jdk自带的强悍工具jvisualvm检测多线程的竞争
我有一个程序,里面有大量的synchronized关键字。我怀疑它们导致的多线程竞争影响了程序的性能。但不知道如何去检测,总不能只凭自己的猜测就去修改它们,万一改到最后发现不是它们的问题,岂不浪费了。
用什么工具来测试呢?我以前用过jprofiler,那个虽然功能强大,但不是免费的。于是我在万能的stackoverflow上提了个问题,聆听神人的教诲。
果然,很快有人提供了一个很强大的免费工具:JDK6自带的jvisualvm。
这个东西我以前听过说,但一直没有用过。看到它提供的截图中可以看到各线程的运行状态,所以准备试一下。这里记录一下使用过程。
在命令行输入jvisualvm。如果jdk安装正确的话(6.x以上版本),就会看到如下的一个窗口:
看起来相当简洁,不像是很强大的样子。
2。运行一个Java程序IncTestN,jvisualvm会自动找到它
3.右键点击它,&#8221;打开&#8221;
可以看到它有很多标签页,可以让我们监测程序的各种数据。默认没有这么多,我其实安装了一些jvisualvm的插件。
4。查看jvm参数及系统属性
5。查看cpu、内存、类、线程的统计数据
注意,右边第一个还可以查看PermGen。对于scala程序,因为它产生了大量的类定义,所以PermGen有可能会不足,可通过该选项查看PermGen,适当调整:
可以看到,对于本程序来说,PermGen还是比较充分的,无须调整。
6。查看各线程运行情况
这个是重点,我们需要知道各线程的运行情况,特别是否被synchronized阻塞了。
注意右下角,有四个状态说明,分别是:
运行(Running):我们最喜欢的状态。说明该线程正在执行代码,没有问题。
休眠(Sleeping):调用了Thread.sleep后的状态,说明线程正停在某个Thread.sleep处
等待(Wait):手动调用了wait方法,或者某些IO操作,在阻塞中等待数据。
监视(Monitor):这里就是我想找的问题了。它表示线程想执行一段synchronized中的代码,但是发现已经有其它线程正在执行,自己被block了,只能无奈地等待。如果这种状态多,说明程序需要好好优化。
从上面的这个图可以看到,下面多个线程都处于&#8221;监视&#8221;状态。多个线程都卡在了独木桥的一头过不去,干不了活干着急呢。
当然这个程序是我专门设计成这样的,存在着严重的性能问题,需要好好优化。
7。查看各线程的统计数据
如果我们需要一些统计数据,比如某个线程总共运行了多少时间,&#8221;运行&#8221;状态有多久(或百分比),休眠、等待、监视有多久,则需要用到&#8221;表&#8221;这一页。
从中可以看到这个悲催的程序,几分所有的时间都用在了synchronized的阻塞上了。只有百分之零点几的时间在运行中,效率可真低啊。
还可以使用图表方式来看这些数据,得到更直观的体验:
8。查看各方法的运行时间
想不想程序中到底是哪些方法一直在运行?可使用&#8221;抽样器&#8221;功能:
我们需要先点击上面的&#8221;CPU&#8221;按钮,它才会开始统计,下面的数据会慢慢多起来。从上图可以看出,程序一直在运行SynIncer.inc()方法,它占用了所有方法执行总时间的99.8%。如果我们想提高程序性能,则需要重点优化它,让它运行得更快。
还想知道方法被调用的次数?使用&#8221;Profiler&#8221;页中的功能:
它与抽样器很像,但是最后多了一个&#8221;调用次数&#8221;。
9。查看哪些对象占用了最多的内存
当出现了内存不足的错误时,想不想知道到底是哪些对象把内存都占用了?这时需要使用&#8221;抽样器&#8221;的&#8221;内存&#8221;检测功能:
从表中可以看出当前最多的是哪些对象,它们有多少个,用了多少个字节。
10。安装更多插件
jvisualvm还在线提供了很多插件,提供了更多的功能。我们可以通过&#8221;工具&#8221;-&&#8221;插件&#8221;,找到并安装它们。推荐全装,比如我就安装了全部(当前有16个):
安装重启后,再找到某个程序节点,就会发现有更多的标签页可用。
11。查看MBeans
MBeans可以将程序中的某些信息暴露给外部。有一些库在设计时,就考虑到了这一点。如果我们不满足于前面那些基础信息,可以在这里看看。
由于当前程序没有使用到提供MBeans信息的库,所以看不到什么多少有用的信息。如果你使用了某些数据库连接池(提供了MBeans功能的),可以在这里看到池里的一些信息,还可以通过&#8221;Operations&#8221;标签页,对程序数据进行一些修改。
12。查看gc情况
垃圾回收是我们不能忽略的一个地方。我们可以通过&#8221;Visual GC&#8221;页,查看到非常详细的垃圾回收情况。
可以说,这个功能提供的信息真是非常地详尽,连两个小Eden的情况也实时地表现出来了。不过要看懂这些数据,还是需要先到网上看看讲解Java垃圾回收的文章,了解其内部原理才行。
13。更多更详细的监测内容
Tracer页提供了更多的监测内容
可以看到程序中遍布探针,让我们实时了解到各处的运行情况。先选中感兴趣的内容,然后点击&#8221;Start&#8221;按钮即可。
这一块比较专业,普通开发人员可能都不知道这些数据到底有什么用。但专业人士可能会觉得会很需要它们。
JvisualVM的大部分功能都已经演示完了,我想它的功能的确很强大,在我们平时的开发中会非常有用。
原文地址:, 感谢原作者分享。
您可能感兴趣的代码}

我要回帖

更多关于 jdk自带反编译工具 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信