前言java
最近一个项目部署在服务器上运行时出现了问题,通过排查发现是java内存溢出的问题,因此为了实时监控服务器java内存的状况,须要远程查看服务器上JVM内存的一些状况。另外服务器系统是CentOS 7 最小安装,没有图形化界面,不能采用vnc远程。因此只能经过VisualVM或者JConsole来远程JVM。sql
环境介绍安全
1. 服务器:CentOS 7(最小安装) ip:192.168.22.249(示例) jdk:1.8
2. 客户端:Windows jdk:1.8服务器
介绍两个jdk1.8自带的可视化监视工具jvm
Jconsole:工具
Java 6.x采用JMX方式提供了一系列监视和管理虚拟机的API,随SDK一块儿发布的JConsole则是采用这些API实现监控虚拟机的使用工具。 JConsole可以提供被监控虚拟机的内存、线程、类的加载以及MBean等信息,从而可以对服务器的运行状况进行实时监控。
JVisualVM:this
是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不须要特定参数,监控工具在bin/jvisualvm.exe),可以监控线程,内存状况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。spa
VisualVM和JConsole在监控本地JVM的时候是很方便的。只要应用程序运行起来,咱们就能够链接上本地JVM,从VisualVM里面监控JVM的状况。插件
远程服务器上的JVM监控就须要一些额外的配置。目前VisualVM支持两种监控方法:Jstatd方法和基于JMX的方法。线程
这篇博客咱们先介绍Jstatd方法
jstatd是一个rmi的server应用,用于监控jvm的建立和结束,而且提供接口让监控工具能够远程链接到本机的jvm 。jstatd位于 $JAVA_HOME/bin目录下,具体使用方法以下:
1,启动RMI服务
在须要被监控的服务器上面,经过jstatd来启动RMI服务
首先,配置java安全访问,在服务器jdk路径(/java_home/bin)下新建文件
名称: jstatd.all.policy
内容:
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
而后在进入jstatd.all.policy所在目录下,经过以下的命令启动RMI服务:
./jstatd -J-Djava.security.policy=jstatd.all.policy
或者
./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.22.249
2.启动客户端的VisualVM,添加远程主机
VisualVM 在/java_home/bin目录下
链接后会自动加载出服务器JVM运行状况。
在Jstatd监控方式下,JConsole是不能启用的,由于JConsole登陆须要端口号。
另外咱们还能够为VisualVM安装一些插件,好比GC,MBeans等等。知足本身的须要。下一篇博客讲解以JVM方式实现远程监控。