关于JAVA性能监控你不了解的5件事(一)

      当遇到应用性能问题时,大多数开发者都有足够的理由惊慌。查找引发Java 应用产生瓶颈的原因历来都是很头疼的问题,因为Java虚拟机的暗箱效果和Java平台的程序调试工具短缺导致。所有这些都随着Java5的JConsole问世而改变。JConsole是一个内建的Java性能分析工具,可以从命令行启动,在GUI中运行。在这篇文章中,我将介绍5种使用JConsole的简单方法来监控Java应用的性能和追踪你代码中的瓶颈。

 

1. JDK中的程序分析工具

      很多开发者不知道自从Java5以后就有一个程序分析工具被集成进了JDK中。在Java5中,Java进程创建时默认不会被分析。通过在启动时加 入命令行参数 -Dcom.sun.management.jmxremote  来告诉Java 5 VM开启连接,分析工具就能找到它。一旦你的进程被JConsole找到,你就可以通过双击它来开始分析。分析器用它自己的开销,所有花些时间来找出这些 开销是不错的主意。找出JConsole开销的最简单方法就是先让一应用自己运行,然后让这个应用在分析器下运行,然后找出他们之间的差别。(这个应用不 能太小或太大,我喜欢用JDK自带的SwingSet2这个例子)所有,作为实例,我先尝试加 -verbose:gc参数运行SwingSet2 来观察垃圾回收曲线,然后在分析器下运行同样的应用。当JConsole连接上以后,会看到一稳定的GC曲线,没有其他的,这就是分析器的开销。

 

2. 远程连接到进程

      因为Web应用分析假设通过socket连接来分析,你只需要一些配置启动JConsole来远程监控/分析运行的应用。例如,如果tomcat运行在名称为“webserver”的机器上,JVM允许JMX并且监听9004端口。从JConsole(或其他JMX客户端)连接需要一JMX URL "service:jmx:rmi:///jndi/rmi://webserver:9004/jmxrmi".本质上,你要分析远程的应用服务只需要JMX URL。


3. 跟踪分析

      JConsole有很多选项卡,对采集分析很有用,包括:

  • Memory:用来跟踪JVM垃圾回收器中堆的活动。
  • Threads:用来检查选定JVM中当前线程的活动。
  • Classes:用来查看JVM中加载的class的总数量。

假如你的Tomcat进程总是因为OutOfMemoryErrors而当掉。如果你想找到原因,打开JConsole,点击Classes选项卡,观察class的数量一段时间。如果这数量持续增加,这时你可以假设你的应用服务器或者你的代码某处有类加载问题,并且用不了多久就会出现超出PermGen空间问题。点击Memory选项卡,如果你想进一步确定问题所在。


4. 创建堆备份做离线分析

      在生产环境中,事情发展的很快,你没有足够的时间来做应用分析。这时,你可以把你Java环境中的所有东西做个快照,用来以后做分析。你可以在JConsole中做这些,但在VisualVM(Java 6 以后,需单独下载)中会更好。


5. JConsole 并非难事

     作为一个分析工具,JConsole很好,但有很多其他的工具比他更出色。有些分析器带有分析插件或是漂亮的界面,或是能够跟踪更多的数据。但JConsole最令人着迷的地方是,它完全是由plain old Java写的,这意味着你也可以写这样的工具。事实上,JDK甚至包含一个创建一插件来定制JConsole的例子。如果JConsole不满足你的需求,你可以在此基础上写你自己的程序分析工具。见build your own profilier 你所要做的仅是命令行工具通过JMX连接,跟踪你感兴趣的数据,以你想要的方式。

 

 

本文引自:http://www.ibm.com/developerworks/java/library/j-5things8.html

 

翻译的不好,见谅!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值