jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析...

jvisualvm已经被集成在jdk1.6以上的版本中(不是jre)。自身运行需要最低jdk1.6版本,但是可以监控运行在jdk1.4以上版本的Java程序

以jdk1.6update45(jdk1.6update45自带的jvisualvm)来做说明,当然也可单独下载独立的jvisualvm,正常安装完jdk后,至jdk的bin目录下,运行jvisualvm.exe即可

网上有人说jvisualvm对ntfs的硬盘格式支持的不好(都说不好,也没说到底哪里不好),反正我用着是挺正常的,不管怎么样先把解决方式记下来吧

创建jvisualvm.exe的快捷方式,右键快捷方式选择属性,在“目标”栏中追加"-XX:+PerfBypassFileSystemCheck"

程序运行后会自动监控本机运行的java程序(Local标签下,远程服务器上的java程序需要另行配置),如果是下载的jvisualvm,解压后,运行bin目录下的jvisualvm.exe即可

Local标签下的第一个VisualVM为jvisualvm对自身的监控,可以看到消耗的资源还是很少的,第二个为本机的eclipse

监控项总共分为Overview,Monitor,Threads和一个Sampler。

1.Overview(jvm启动参数,系统参数)

可以看到eclipse的启动参数

(通过这些启动参数,可以判断程序是否有内存溢出)

2.Monitor

左上:cpu利用率,gc状态的监控

右上:堆利用率,永久内存区的利用率

左下:类的监控

右下:线程的监控

performGC:gc的详细运行状态

HeapDump:堆的详细状态(可以看到堆的概况,里面所有的类,还能点进具体的一个类查看这个类的状态)

3.Threads

能够显示线程的名称和运行的状态,在调试多线程时必不可少,而且可以点进一个线程查看这个线程的详细运行情况

监控服务器上的tomcat

tomcat的配置文件catalina.sh中增加:

  1. JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9998
  2. -Dcom.sun.management.jmxremote.ssl=false
  3. -Dcom.sun.management.jmxremote.authenticate=false
  4. -Djava.rmi.server.hostname=192.168.58.164"

参数说明:

  1. 指定了JMX启动的代理端口,这个端口就是visualvm要连接的端口(9998端口不能被别的程序使用netstat -an|gerp 9998)
  2. Dcom.sun.management.jmxremote.port=9998
  3. 指定了JMX是否启用ssl
  4. Dcom.sun.management.jmxremote.authenticate=false
  5. 指定了JMX是否启用鉴权(需要用户名,密码鉴权)
  6. Dcom.sun.management.jmxremote.authenticate=false
  7. 指定了服务器主机名
  8. Djava.rmi.server.hostname=192.168.58.164

填写主机名:

右键创建一个jmx连接:

填写上端口号即可:

配置完成:

监控服务器上的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目录下),文件内容如下:

  1. grant codebase "file:/home/123/123/jdk1.5.0_15/lib/tools.jar" {
  2. permission java.security.AllPermission;
  3. };

然后使用这个策略文件启动jstatd服务

  1. [123@123 bin]$ pwd
  2. /home/123/123/jdk1.5.0_15/bin
  3. [123@123 bin]$ ./jstatd -J-Djava.security.policy=./jstatd.all.policy &

因为监控的过程中需要jstatd服务一直运行,所以加上了&,如果需要日志也可使用:

  1. ./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初步判断和主机名有关系

  1. [123@123 bin]# hostname -i
  2. 127.0.0.1
  1. [123@123 bin]# hostname 192.168.58.168

修改完重启jstatd服务(网上很多人说要修改主机的/etc/hosts文件,但是我自己测试修改/etc/hosts文件是没有效果的,必须要修改主机名)

填写主机名:

这里要选添加一个jstatd连接:

直接选择默认配置即可(默认使用1099端口):

点击ok后,168上的所有java程序就会自动列出:

PS:

jvisualvm也是可以安装插件的,具体步骤为tool -> plugin ->aviable plugin,推荐一个非常好用的插件VisualGC

安装完这个插件后,将会增加新的监控条目Visual GC,可以看到虚拟机内存各个区的使用情况

jvisualVM的使用的更多相关文章

  1. Java jvisualvm简要说明

    jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程分析... jvisualvm已经被集成在jdk1.6以上的版本中(不是jre).自身运行需要最低jdk1.6版本, ...

  2. 使用jvisualvm.exe 的Btrace插件介绍/使用教程

    一.背景        在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数.返回值.全局变量.堆栈信息等.为了获取这些数据信息,我们可以 通过改写代码,增加日志信息的打 ...

  3. Spark的Straggler深入学习(1):如何在本地图形监控远程Spark的GC情况——使用java自带的jvisualvm

    一.本文的目的       Straggler是目前研究的热点,Spark中也存在Straggler的问题.GC问题是总所周知的导致Straggler的重要因素之一,为了了解GC导致的Straggle ...

  4. 【经验记录】Jconsole Jvisualvm 监控Tomcat

    环境:centos 6 1.首先检查hostname是否正确,输入以下命令 hostname -i 如果输出机器ip,则表示正确,如果输出 hostname: Unknown host 查看/etc/ ...

  5. JVM内存监控工具 Jvisualvm

    这个工具是官方提供的,直接在JDK工具包下的bin目录找找就可以找到,或者打开cmd直接输入"jvisualvm"即可打开该工具(配置好java环境变量). 需要在catalina ...

  6. JVM性能监控工具-Jvisualvm

    用法:Jvisualvm是JDK自带的一款性能分析工具 使用方式: 1.配置好JDK环境变量 1.本地JVM监控略 2.远程JVM监控 用JMX对Resin内存状态进行监控 ,可以看到本地所有可监控的 ...

  7. 运用JMX监控Tomcat/Java jvisualvm简要说明

    公司线上项目出现了java heap space 然后经过查询知晓了下面工具于是开始了尝试. visualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程分析... jvisua ...

  8. jvisualvm远程监控jvm设置

    有些时候,需要对特定环境中的Java应用进行实时性能分析,大部分非开发和测试环境,一般都是用jvisualvm进行基本检测以最小化对系统的影响(其开启后,负载影响大约20%-30%),jvisualv ...

  9. 【转】使用JDK自带jvisualvm监控tomcat

    转载地址: http://my.oschina.net/kone/blog/157239 jdk自带有个jvisualvm工具.该工具是用来监控java运行程序的cpu.内存.线程等的使用情况.并且使 ...

  10. 使用Jvisualvm监控JVM的内存、CPU、线程

    最近做性能测试发现很多性能问题,面对一些开发小白的数据结构思想,真想喊一声:放开那个代码,让我来!冲动. 面对WEB站点开发,性能测试是经常要做的,下面一种介绍如何结合性能测试工具,更好的监控WEB服 ...

随机推荐

  1. 【转载】C#工具类:Json操作帮助类

    Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON.数据 ...

  2. IdnentiyServer-使用客户端凭据访问API

    情景如下:一个客户端要访问一个api,不需要用户登录,但是又不想直接暴露api给外部使用,这时可以使用identityserver添加访问权限. 客户端通过clientid和secrect访问iden ...

  3. [PHP] 算法-数值的整数次方的PHP实现

    给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: 1.指数的二进制表达10^6次方 可以表示10^110(二进制) 10^100 ...

  4. 深入理解JAVA中的NIO

    前言: 传统的 IO 流还是有很多缺陷的,尤其它的阻塞性加上磁盘读写本来就慢,会导致 CPU 使用效率大大降低. 所以,jdk 1.4 发布了 NIO 包,NIO 的文件读写设计颠覆了传统 IO 的设 ...

  5. js实现ctrl+v上传图片

    描述:实现类似QQ截图删上传图片的功能 a.需要的js插件 paste.image.js 地址:https://github.com/iyangyuan/pasteimg b.paste.image. ...

  6. Integer Partition(hdu4658)2013 Multi-University Training Contest 6 整数拆分二

    Integer Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...

  7. Hibernate入门(六)---------HQL语句

    Query: 代表面向对象的一个Hibernate查询操作.在Hibernate中,通常使用session.createQuery()方法接收一个HQL语句,然后调用Query的 list()或uni ...

  8. Java反射的简单入门

    1.Class的简单介绍 Class类的类表示正在运行的Java应用程序中的类和接口. 枚举是一种类,一个注解是一种接口, 每个数组也属于一个反映为类对象的类,该对象由具有相同元素类型和维数的所有数组 ...

  9. CSS3 - @keyframes

    语法 @keyframes animationname { keyframes-selector {css-styles;} } 值 描述 animationname 必需.定义动画的名称. keyf ...

  10. MongoDB日志文件过大的解决方法

    MongoDB的日志文件在设置 logappend=true 的情况下,会不断向同一日志文件追加的,时间长了,自然变得非常大. 解决如下:(特别注意:启动的时候必须是--logpath指定了log路径 ...