java开发中如何使用JVisualVM进行性能分析_java

JVisualVM是由Sun提供的性能分析工具,如此强大的后盾怎能不强大?在Jdk6.0以后的版本中是自带的,配置好环境变量然后在运行中输入“JVisualVm”或直接到Jdk的安装目录的Bin目录下找到运行程序即可运行。如果是用Jdk1.5或以前版本的朋友就得要单独安装了。

我觉得其还有一个强大的地方就是不需要用代理启动(即如果要监视某个程序则需要用测试软件来运行程序方便其监视如YourKit这款同类的测试工具)的方式来运行,十分方便,只要是用Jdk环境运行的,打开此测试工具后即能看到并监视程度的运行状态,当然前提是要运行在同一个Jdk的环境中。

地址:https://visualvm.dev.java.net/

连接

1、本地机器的程序直接可以监听到

2、远程机器的程序需要加上JVM参数

-Dcom.sun.management.jmxremote= true

-Dcom.sun.management.jmxremote.port= 9090

-Dcom.sun.management.jmxremote.ssl= false

-Dcom.sun.management.jmxremote.authenticate= false

备注:另外需要检查

hostname –i

看解析出来是否为本地的IP,如是127.0.0.1或者IP为多个IP中之一,则其他的IP无效,会连接不上。

这里有个分析案例,利用jvisualvm分析tomcat的问题:

http://blog.tty.nl/2010/09/03/using-visualvm-to-fix-live-tomcat-and-jvm-problems

插件安装

tools->plugin->Available Plugin 会有值得安装的插件,如:VisualGC JConsole

 

插件列表:https://visualvm.dev.java.net/plugins.html

注意:上面提供的端口配置有些麻烦,不如直接这样做:

要使用 VisualGC 必须在远程机上启动jstatd代理程序,否则会显示 “not supported for this jvm” 错误
而启动 jstatd 时会有一个权限问题,需要做如下修改:
nano /opt/sun-jdk- 1.6 . 0.26 /jre/lib/security/java.policy

复制代码 代码如下:

nano /opt/sun-jdk-1.6.0.26/jre/lib/security/java.policy

增加下列行

复制代码 代码如下:

grant codebase "file:${java.home}/../lib/tools.jar" {
 permission java.security.AllPermission;
};

然后启动 jstatd并且不要关闭

如:


Threads

查看线程的运行情况,运行、停止、睡眠、等待,根据这些结合实际程序运行的逻辑分析。

找到可疑份子,可以Thread Dump  找出具体是哪个线程在作祟。

参看这个例子:http://blog.tty.nl/2010/09/03/using-visualvm-to-fix-live-tomcat-and-jvm-problems

profile

关于如何使用,如何分析程序,可以参看这个例子:http://www.baptiste-wicht.com/2010/07/profile-applications-java-visualvm

时间: 2024-10-28 07:01:18

java开发中如何使用JVisualVM进行性能分析_java的相关文章

java开发中基于JDBC连接数据库实例总结_java

本文实例讲述了java开发中基于JDBC连接数据库的方法.分享给大家供大家参考,具体如下: 创建一个以JDBC连接数据库的程序,包含7个步骤:   1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ;

完整java开发中JDBC连接数据库代码和步骤_java

JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ Sys

java开发中:用户、订单、订单详情、商品之间的关系 搞不清

问题描述 java开发中:用户.订单.订单详情.商品之间的关系 搞不清 此案例的业务关系是用户.订单.订单详情.商品之间的关系,其中, 一个订单只能属于一个人. 一个订单可以有多个订单详情. 一个订单详情中包含一个商品信息. 所以它们的关系是如下: 订单和人是 一对一的关系. 订单和订单详情是 一对多 的关系. 订单和商品是 多对多的关系. 明明人和订单是一对多,为什么说成了一对一,订单和商品又怎么是多对多的关系? 求解 解决方案 最近在oracle数据库里刚学了交易系统表结构的设计,来说说我的

开放-java开发中,一般涉及到金钱计算的时候用什么数据类型?

问题描述 java开发中,一般涉及到金钱计算的时候用什么数据类型? java开发中,一般涉及到金钱计算的时候用什么数据类型?精度尽量高 解决方案 BigDecimal类把数字封装再进行运算就可以精确运算 解决方案二: 其实用integer或者long整体放大100倍就可以了.精确到1分钱.最大可以表示4200万(对于int),至于long,表示的更是天文数字了. 解决方案三: BigDecimal一般用在货币计算 解决方案四: BigDecimal 解决方案五: BigDecimal可以表示任意

Java开发中对算法的要求高么,大神进来看看

问题描述 Java开发中对算法的要求高么,本人最近要参加一个叫蓝桥杯的比赛,考核的内容偏重与算法,可能参加了这个比赛可能对自己算法方面有提高,与现在学的框架,web技术好像根本没有关系,况且,报名费就300,给人的感觉不是很好.....不知道算法这个东西在实际工作中用的如何,还望大神指点 解决方案 解决方案二:不管是什么语言,算法都是很重要的解决方案三:蓝桥杯还行吧,虽然比acm水,但还是有一定含金量的.解决方案四:重要,而且算法是通用的,转其他语言也用得到.解决方案五:一个字:很重要解决方案六

mongodb的java开发中使用两个字段相等查询条件应该怎么写?

问题描述 mongodb的java开发中使用两个字段相等查询条件应该怎么写? 也就是类似sql中的where 字段A=字段B这样的条件,我查了下网上有些帖子中写的用$where的方式我查询的时候会出错,类似于:new Document("$where",new Document("字段A", "字段B")),驱动版本是3.0 在网上查到一个帖子:http://cache.baiducontent.com/c?m=9d78d513d99c1cf30

Java开发中的23种设计模式详解(转)

Java开发中的23种设计模式详解(转) 设计模式(Design Patterns)                                   --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合

数据库连接-在java开发中的数据库的连接

问题描述 在java开发中的数据库的连接 数据库的内连接和外连接有啥区别?对于它的连接有哪些优势?请详细说明,谢谢! 解决方案 http://www.educity.cn/shujuku/555272.html 解决方案二: 数据库的内连接和外连接,这里有详解. 参考:http://blog.csdn.net/presidentpresident/article/details/7549241

java开发中通用分页类代码

java开发中通用分页类代码 在java中要分页我们必须要有数据库教程,所以我们先准备下数据库,其数据库脚步如下: --以下是创建数据库和数据库表以及向数据库插入数据   use master  Go  if exists(select * from sysdatabases where name='pagination')  drop database pagination  Go  create database pagination  Go  use pagination  Go  cre