Java VisualVM远程监控JVM

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

本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1608005,如需转载请自行联系原作者

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107925.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Repeater嵌套gridview「建议收藏」

    Repeater嵌套gridview「建议收藏」前台:<asp:RepeaterID=”Repeater1″runat=”server”DataSourceID=”SqlDataSource1″OnItemDataBound=”Repeater1_ItemDataBound”><ItemTemplate>id:<%#Eval(“ID”)%>c…

    2022年10月12日
  • Redis在Laravel项目中的应用实例详解

    Redis在Laravel项目中的应用实例详解

    2021年10月24日
  • JS学习笔记-OO创建怀疑的对象

    JS学习笔记-OO创建怀疑的对象

  • windows下安装MinGW及C++的环境配置

    windows下安装MinGW及C++的环境配置方法一——VS:  使用windows开发神器visiostudio。这种方法比较简单,直接下载一个最新的vs安装就行。不单单是C++,C、C#、VB等都可以开发。方法二——只安装C++编译器:  最常用的免费可用的编译器是GNU的C/C++编译器,为了在Windows上安装GCC,您需要安装MinGW。1.首先去MinGW主页下载最新版本的MinGW:&nbsp;www…

  • java中method方法_java修改字体大小

    java中method方法_java修改字体大小LocalDateaThousandDaysLater=hello.plusDays(1000);这个调用后hello会有什么变化?他会改为1000天之后的日期吗?事实上,并没有。plusDays()方法会生成一个新的LocalDate对象,然后将这个新对象赋值给aThousandDaysLater。原来的对象在堆中不会有任何改变。我们说的plusDays方法没有更改调用plusDays方法的

  • 大三的时候,看了这些Java面试题【附答案】,我进华为了「建议收藏」

    如果要进大厂,算法、底层、项目经验都要刷,猛哥以后会给大家更新各种面试题……前面,我们已经整理Spring、设计模式、数据结构和算法的面试题:插入文章昨天小伙伴给我说看了面试题,拿到了京东的offer,大家继续努力呀。转存失败重新上传取消如果你想进大厂,一定要有非常明确的信念:我必须进去!一定进去!别犹豫犹豫的,整天自我否定,总有人要赢,赢得人为什么不是为呢???我非常欣赏衡水中学的教学模式,我们普通人没有别的逆袭方式,就是努力,就是干!!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号