Java jvisualvm简要说明(转)
转自:http://blog.csdn.net/a19881029/article/details/8432368
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中增加:
- JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9998
- -Dcom.sun.management.jmxremote.ssl=false
- -Dcom.sun.management.jmxremote.authenticate=false
- -Djava.rmi.server.hostname=192.168.58.164"
参数说明:
- 指定了JMX启动的代理端口,这个端口就是visualvm要连接的端口(9998端口不能被别的程序使用netstat -an|gerp 9998)
- Dcom.sun.management.jmxremote.port=9998
- 指定了JMX是否启用ssl
- Dcom.sun.management.jmxremote.authenticate=false
- 指定了JMX是否启用鉴权(需要用户名,密码鉴权)
- Dcom.sun.management.jmxremote.authenticate=false
- 指定了服务器主机名
- 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目录下),文件内容如下:
- grant codebase "file:/home/123/123/jdk1.5.0_15/lib/tools.jar" {
- permission java.security.AllPermission;
- };
然后使用这个策略文件启动jstatd服务
- [123@123 bin]$ pwd
- /home/123/123/jdk1.5.0_15/bin
- [123@123 bin]$ ./jstatd -J-Djava.security.policy=./jstatd.all.policy &
因为监控的过程中需要jstatd服务一直运行,所以加上了&,如果需要日志也可使用:
- ./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初步判断和主机名有关系
- [123@123 bin]# hostname -i
- 127.0.0.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,可以看到虚拟机内存各个区的使用情况
Java jvisualvm简要说明(转)的更多相关文章
- Java jvisualvm简要说明
jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程分析... jvisualvm已经被集成在jdk1.6以上的版本中(不是jre).自身运行需要最低jdk1.6版本, ...
- 运用JMX监控Tomcat/Java jvisualvm简要说明
公司线上项目出现了java heap space 然后经过查询知晓了下面工具于是开始了尝试. visualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程分析... jvisua ...
- Java Reference简要概述
@(Java)[Reference] Java Reference简要概述 Reference对象封装了其它对象的引用,可以和普通的对象一样操作. Java提供了四种不同类型的引用,引用级别从高到低分 ...
- [转]java加密算法简要介绍
本篇内容简要介绍BASE64.MD5.SHA.HMAC几种加密算法. BASE64编码算法不算是真正的加密算法. MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密 ...
- Java Gson 简要笔记
Gson是Google开发的Java比较好用的 Json工具. 使用挺简单,假设有个类: class Runner { int attr; String name; public Runner(int ...
- java容器简要概述
java中集合框架的概述 java集合类主要用于保存对象的. 常用的集合对象: Colletion接口,Collection接口是集合中的顶层容器,表示的是一组对象,它的下面有两个子接口List接口和 ...
- java基础-构建命令行运行的java程序简要注意
今天编写了一个运行在服务端的java工具类,才发现自己以前很少关注运营方面的内容,导致在服务端部署一个java的工具变得异常困难,其实这也是自己对java的了解不够造成的. 首先,当代码编写完成之后, ...
- JAVA集合类简要笔记 - 内部类 包装类 Object类 String类 BigDecimal类 system类
常用类 内部类 成员内部类.静态内部类.局部内部类.匿名内部类 概念:在一个类的内部再定义一个完整的类 特点: 编译之后可生成独立的字节码文件 内部类可直接访问外部类私有成员,而不破坏封装 可为外部类 ...
- Java jvisualvm 远程监控tomcatt
第一步 在远程tomcat 的bin目录下的start.sh 文件中添加一些内容(添加在exec "$PRGDIR"/"$EXECUTABLE" start & ...
随机推荐
- 一个简单的JSP 连接MySQL使用实例
一.软件环境 下载并安装MySQL,Tomacat,JDBC.MyEclipse或其他IDE. 二.环境配置 将其环境变量配置好之后,下载Java 专用的连接MySQL的驱动包JDBC,有人会发现在一 ...
- jmeter.bat无法启动
jmeter.bat启动时提示:'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件. 学习中遇到的问题: 'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件. ...
- IO操作之ObjectInputStream与ObjectOutputStream
之前写过DataInputStream和DataOutputStream,使用这两个类可以对java基本数据类型进行序列化和反序列化. 本篇再来两个新东西:ObjectInputStream,Obje ...
- LDD3 第13章 USB驱动程序
通用串行总线(USB)是主机和外围设备之间的一种连接.最新USB规范修订增加了理论上高达480Mbps的高速连接. 从拓扑上看,USB子系统并不是以总线的方式来布置的,它是一颗由几个点对点的连接构建而 ...
- webpack对html模板的处理
一.打包html模板到相应目录并且引入js 需要安装 html-webpack-plugin 然后在plugins里实例化 new HtmlWebpackPlugin({ template:'./sr ...
- 使用SSH 工具 Xshell 6连接CentOS 7.4
在使用Xshell 6连接 服务CentOS 7.4之前,首先你要配置好服务器,如果没有配置好服务器的,请访问: (一)小白教小白配置 服务器 好了,开始正文! 首先准备,SSH 工具 Xshell ...
- 移动端与pc端的区别 及 ios的 兼容性问题
前言:这里移动端主要指 hybrid app 中的H5页面.app 中对页面 样式和功能 的需求会更精细一点. 1.适配: 手机端的尺寸多样,3.5英寸的 iPhone4应该是最小的,只要考虑 兼容到 ...
- 【前端技术】一篇文章搞掂:微信小程序
实战: 1.[openId]获取openId 有如下几种方法: 通过wx.login()获取临时登录凭证 code,然后通过code2session获取openId wx.login():https: ...
- soj#532 set p3175
传送门 分析 代码 #include<bits/stdc++.h> using namespace std; ; <<],Ans; int n,m,N; inline int ...
- jmeter添加自定义扩展函数之图片base64
原文连接:---------https://www.cnblogs.com/qiaoyeye/p/7218770.html----------- 打开eclipse,新建maven工程,在pom中引用 ...