JConsole 远程监控java虚拟机JVM

JConsole是从Java 5中开始引入的一个用于对JVM性能和资源消耗进行监控的图形化工具。

JConsole可以连接本地的Java程序,也可以连接远程的Java程序。由于是GUI的方式使用,所以就不细说那些基本的使用方法了,这里只是记录一下试用过程中遇到的几个小问题及其解决方案。

这里使用的是SPECjbb2005这个benchmark中的Java来做了一下试验,因为它也是一个Java Application的benchmark,可以在run.sh脚本中对“JAVA_OPTIONS=”这一行进行相应的定制。

1. 要实现让JConsole可以远程连接到某个Java程序,则需要在Java程序启动的JAVA_OPTION中添加选项“com.sun.management.jmxremote.port=8888”来指定远程管理的端口。

2. 启动Java程序时,遇到如下报错:

 代码如下 复制代码

[root@localhost SPECjbb2005]# ./run.sh
Thu Jul 25 23:00:50 CST 2013
 
./jbb.jar:./check.jar:
java full version "1.6.0_24-b24"
Error: Password file not found: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/management/jmxremote.password
Thu Jul 25 23:00:50 CST 2013

这是由于开启Java JMX 远程管理时,默认会有用户名密码的验证,所以需要相应的密码文件。

 代码如下 复制代码

[root@localhost SPECjbb2005]# ls /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/management/
jmxremote.access  jmxremote.password.template  management.properties  snmp.acl.template

需要先在jmxremote.access中定义用户权限,然后在jmxremote.password文件中定义用户名和对应的密码,jmxremote.password文件可以复制jmxremote.password.template模板文件来进行修改。
当然,在内网中仅仅用于调试,我们一般可以不设置密码验证和SSL连接方式,Java选项如下:
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

3. 在进行了端口和认证信息的配置后,发现在JConsole中通过IP远程连接JVM依然不成功。
错误信息为:Connection Failed: Retry? The connection to 192.168.52.11:8888 did not succeed. Would you like to try again?
在启动Java时,需要设置RMI远程调用的主机名,一般设置为主机的IP地址即可,如下:
-Djava.rmi.server.hostname=192.168.52.11
(当然,也有可能是由于前面第2点中提到的SSL的设置问题,依然需要检查一下)

关于JConsole,还是得执行看看Oracle的这篇Java SE 6 中的JConsole的描述:

http://docs.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html

(特别是上面文档中对监控数据、图形代表的意义是需要认真理解的)

时间: 2024-10-22 07:28:15

JConsole 远程监控java虚拟机JVM的相关文章

深入理解Java虚拟机:JVM高级特性与最佳实践

目 录 [ - ] <深入理解Java虚拟机:JVM高级特性与最佳实践>前言 <深入理解Java虚拟机:JVM高级特性与最佳实践>内容特色 <深入理解Java虚拟机:JVM高级特性与最佳实践>目录 第1章 走近Java 1.1 概述 1.2 Java技术体系 1.3 Java发展史 1.4 展望Java技术的未来 1.4.1 模块化 1.4.2 混合语言 1.4.3 多核并行 1.4.4 进一步丰富语法 1.4.5 64位虚拟机 1.5 实战:自己编译JDK 1.5.1

java虚拟机 jvm 出入java栈 栈空间内存分配

java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关.线程最基本的执行行为就是函数的调用.每次函数调用其实是通过java栈传递数据的. 数据结构中的栈的特性:先进后出,后进先出.FIFO. java内存中的栈跟数据结构中的特性相似也是FIFO.但是只支持进栈和出栈操作. java栈中保存的主要内容是栈帧.每一次函数调用都会有对应的栈帧被压进去java栈,执行完毕的时候被弹出java栈.如下图所示. 函数1对应栈帧1,函数2对应栈帧2.函数3对

Java虚拟机JVM性能优化(二):编译器_java

本文将是JVM 性能优化系列的第二篇文章(第一篇:传送门),Java 编译器将是本文讨论的核心内容. 本文中,作者(Eva Andreasson)首先介绍了不同种类的编译器,并对客户端编译,服务器端编译器和多层编译的运行性能进行了对比.然后,在文章的最后介绍了几种常见的JVM优化方法,如死代码消除,代码嵌入以及循环体优化. Java最引以为豪的特性"平台独立性"正是源于Java编译器.软件开发人员尽其所能写出最好的java应用程序,紧接着后台运行的编译器产生高效的基于目标平台的可执行代

Java虚拟机JVM性能优化(一):JVM知识总结_java

Java应用程序是运行在JVM上的,但是你对JVM技术了解吗?这篇文章(这个系列的第一部分)讲述了经典Java虚拟机是怎么样工作的,例如:Java一次编写的利弊,跨平台引擎,垃圾回收基础知识,经典的GC算法和编译优化.之后的文章会讲JVM性能优化,包括最新的JVM设计--支持当今高并发Java应用的性能和扩展. 如果你是一个开发人员,你肯定遇到过这样的特殊感觉,你突然灵光一现,所有的思路连接起来了,你能以一个新的视角来回想起你以前的想法.我个人很喜欢学习新知识带来的这种感觉.我已经有过很多次这样

了解Java虚拟机JVM的基本结构及JVM的内存溢出方式_java

JVM内部结构图 Java虚拟机主要分为五个区域:方法区.堆.Java栈.PC寄存器.本地方法栈.下面 来看一些关于JVM结构的重要问题. 1.哪些区域是共享的?哪些是私有的? Java栈.本地方法栈.程序计数器是随用户线程的启动和结束而建立和销毁的, 每个线程都有独立的这些区域.而方法区.堆是被整个JVM进程中的所有线程共享的. 2.方法区保存什么?会被回收吗? 方法区不是只保存的方法信息和代码,同时在一块叫做运行时常量池的子区域还 保存了Class文件中常量表中的各种符号引用,以及翻译出来的

Java虚拟机jvm关于内存的设置与调优

JVM内存的设置的原理 默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError. 设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置. java -Xms64m -Xmx256m Test -Xms是设置内存初始化的大小 -Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小) 在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大

java虚拟机 jvm 栈数据区

java栈帧还是需要一些数据支持常量池的解析.正常方法的返回和异常的处理.大部分的java字节码指令需要进行常量池的访问,在栈帧数据区中保存着访问常量池的指针,方便程序访问java常量池.如下图所示:   当函数返回或者程序出现异常的时候,jvm虚拟机必须恢复调用者函数的栈帧,并且让调用者函数继续执行.什么意思呢?举一个通俗的例子: a()调用b()当b()返回的时候肯定继续让a()继续执行对吧.b()抛出异常的时候a()肯定也需要处理对吧. 对于异常的处理,jvm是如何处理的呢?虚拟机肯定必须

jdk jvisualvm 或 jconsole 远程监控 tomcat

tomcat 的监控特别烦,不仅有很多线程参数,而且还有堆内存.非堆内存.新生代等信息:如果要绘制成图形会非常的不方便,不仅是单位不同,更多的是 tomcat 本身也有许多个 ,每个 tomcat 又有不同的图形. 那下面这款软件是 JDK 自带的 VisualVM ,它可以检测 tomcat 的各个参数.它包括 tomcat 启动的一些参数:系统的一些属性. CPU 使用率.类.堆.以及线程等信息. 准备: 这个文件自己在百度找找下载下来,放在 tomcat\lib 里面 catalina-j

Java虚拟机JVM内存分区及代码执行机制

1.  JVM体系结构   图1 JVM体系结构        方法区:存放JVM加载的类型信息.包括: 类型基本信息,常量池,字段信息,方法信息,类变量,指向ClassLoader的引用,Class类的引用,方法表等. (对应JVM内存配置中的-PermSize等)    java堆:程序中创建的类的实例和数组,包括class对象和exception对象,存放在堆里面.堆中除了存储对象的实例数据外,还要存储该对象指向方法区中类型信息的指针. (JVM中所有的线程共享堆空间,对应JVM内存配置中