开发者社区> 李振良> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java VisualVM远程监控JVM

简介:
+关注继续查看

   VisualVM是一个以监控、显示本地或者远程服务器JVM工作情况,进行性能调优的工具。借助VisualVM,我们可以实现对JVM内存各个子池、CPU、垃圾收集器等方面进行监控,从而发现程序代码中潜在的泄露点和配置问题。


远程监控Linux JVM有两种连接方式:

CentOS6.5安装:yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

Ubuntu12.04安装:sudo apt-get install java-7-openjdk


方式1:通过Jstatd启动RMI服务

1.开启远程监控访问,将下面注释去掉,Ubuntu和CentOS JAVA安装路径不同,其他配置基本一样。

 Ubuntu:

1
2
3
# vi /etc/java-7-openjdk/management/jmxremote.password 
monitorRole  QED      
controlRole   R&D

 CentOS:

1
2
3
4
5
6
# cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-1.b13.el6_6.x86_64/jre/lib/management/
# cp jmxremote.password.template jmxremote.password
# chmod 644 jmxremote.password
# vi jmxremote.password
monitorRole  QED      
controlRole   R&D

2.jstatd以守护进程启动

1
2
3
4
5
6
7
8
9
# jstatd -J-Djava.rmi.server.hostname=192.168.1.156 &
# Could not create remote object
access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
        at java.security.AccessController.checkPermission(AccessController.java:559)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.System.setProperty(System.java:783)
        at sun.tools.jstatd.Jstatd.main(Jstatd.java:139)

出现错误,说没有权限,于是百度一下,找到解决办法,就可以正常启动了,如下:

1
2
3
4
5
6
# cd /tmp
# vi jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" 
   permission java.security.AllPermission; 
};
# jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.156 &

打开JVisualVM工具(默认端口1099)-->添加远程主机-->双机主机IP,即可监控

CPU图形没有显示,不受此JVM支持,目前还没找到原因,有知道的博友,还请告知下,谢谢!

wKiom1TERXnT2A5RAAZz4IfE-2E179.jpg

方式2:JMX方式监控应用程序,我们以Tomcat为例(常用)

1
2
3
4
5
6
7
8
9
10
# cd /root/apache-tomcat-8.0.17/bin
# vi catalina.sh   #找到JAVA_OPTS,在下面添加,添加的位置并没要要求
#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
JAVA_OPTS="$JAVA_OPTS-Dcom.sun.management.jmxremote 
        -Dcom.sun.management.jmxremote.port=9999 
        -Dcom.sun.management.jmxremote.authenticate=false 
        -Dcom.sun.management.jmxremote.ssl=false 
        -Djava.rmi.server.hostname=192.168.1.156"
# ./startup.sh 
# netstat -antp |grep 9999    #查看端口是否监听

打开JVisualVM工具-->添加远程主机-->在远程主机添加JMX连接-->补全端口,确认即可

wKiom1TESjugXERQAAdJO8Fa6Gs528.jpg

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java实现单词计数MapReduce
本文分享实现单词计数MapReduce的方法
0 0
JAVA 实现上传图片添加水印(详细版)(上)
JAVA 实现上传图片添加水印(详细版)
0 0
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
0 0
Java实现图书管理系统
本篇文章是对目前Java专栏已有内容的一个总结练习,希望各位小主们在学习完面向对象的知识后,可以阅览本篇文章后,自己也动手实现一个这样的demo来加深总结应用已经学到知识并进行巩固。
0 0
java实现spring boot项目启动时,重启Windows进程
java实现spring boot项目启动时,重启Windows进程
0 0
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
如果要在某一个界面里面添加功能的话,都在一个类中,会显得代码难以阅读,而且修改起来也会很困难,所以我们将游戏主界面、登录界面、以及注册界面都单独编成一个类,每一个类都继承JFrame父类,并且在类中创建方法来来实现页面
0 0
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
ip地址的分类: 1、ipv4、ipv6 127.0.0.1:4个字节组成,0-255,42亿;30亿都在北美,亚洲就只有4亿 2011年就用尽了。
0 0
Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现
注意由于我们计步功能的步数要在重写方法中用到,所以不能将初始化语句写在方法体内,而是要写在成员位置。在其名字的时候也要做到“见名知意”,所以我们给它起名字为step
0 0
Java实现拼图小游戏(7)—— 作弊码和判断胜利
当我们好不容易把拼图复原了,但是一点提示也没有,完全看不出来是成功了,那么我们就需要有判断胜利的功能去弹出“成功”类的图片,以便于玩家选择是重新开始还是退出小游戏
0 0
+关注
李振良
6年互联网运维经验,擅长Linux,Python,Docker,MySQL,运维自动化等技术领域。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JAVA 应用排查全景图
立即下载
Java工程师必读手册
立即下载
Java应用提速(速度与激情)
立即下载