Java应用程序性能监控工具

简介

当一个软件系统完成基本功能上线运行后,如前期设计不佳,后面很容易出现内存和性能问题。解决这些问题有多种途径,其中最为常用的方式:借助监控工具,直接找到问题点(或某个范围),然后仔细研究代码,找出根因并整改。本文仅对性能类问题做深入探讨

当程序出现性能问题后,最直接的表现是:系统请求响应变慢、CPU持续居高不下,常见可能导致性能问题的操作:

1)频繁的I/O操作(比如:网络,本地文件读写);
2)频繁的申请较大内存,导致系统频繁Full GC;
3)由于程序自身bug,导致系统进入死循环或其它耗时逻辑中;
4)不当的锁保护(力度过大),导致响应线程等待;
5)其它...

有些性能问题,只有系统上到一定的压力下,才表现出来。为避免,就要求我们在日常的编码中要勤思考

Java性能问题分析工具概述

  • HPROF

Java自带的分析工具,通过实现Java Virtual Machine Tool Interface(JVM TI),监控虚拟机类加载、方法调用等事件,对其做数据收集,从而统计出性能数据。

参考:http://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html

  • VisualVM

JDK自带的分析工具,JDK_1.6.23之后的版本才带着个工具,监控一段时间后,收集快照,可以找到耗时点 


参考:http://visualvm.java.net

  • jProfiler

一款商业工具,需要付费,但其功能非常强大,不仅可以分析性能问题,还可以分析诸如:内存泄露、线程同步等问题,该工具使用比较广

参考:http://www.ej-technologies.com/products/jprofiler/overview.html

  • YourKit

类似jProfiler,需要付费,其功能没有jProfiler强大,但运行速度更流畅些,具体没使用过

参考:http://www.yourkit.com/overview/index.jsp

监控方式

  • 1)日志:
通过System.currentTimeMillis(),在待检测逻辑前后分别获取系统时间戳,做差值计算后,输出至控制台或文件;
其最大缺点是要该代码,对业务逻辑浸入大;
  • 2)事件:
采用 JVMTI(JVM Tools Interface)API 来捕捉诸如方法调用、类载入、类卸载、进入/离开线程等事件,然后基于这些事件进行程序行为的分析,JVMTI需要使用C/C++编写实现代码
  • 3)抽样(sampling):
每隔一段时间中断系统,收集当前的调用栈信息,基于这些信息得到函数的调用关系图及每个函数的 CPU 使用信息;
缺点是:分析不是非常精确的,但几乎不影响目标程序的运行速度。
  • 4)字节码注入 (BCI)
在运行期,动态在目标程序中添加profiler逻辑片段,实时收集方法、内存等信息;
缺点是:影响程序运行速度,但其统计的耗时百分比是比较准确的

PerfMonitorTool详细介绍

本工具是基于方式4)字节码注入 (BCI)+javaagent技术实现,如下图所示:


  • Java agent:
主要作用是向JVM虚拟机中注册一个代理,从而可以监控类加载
  • ASM:
是一种动态修改Java字节码技术,纯Java实现,通过其提供的方法,可以在加载类过程中,完成对待监控类方法对应字节码的修改
[延伸]:bTrace也可以实现,其功能更强大
  • 前期准备
1)安装Bytecode Outline插件:
  在Eclipse中:"Help->EclipseMarketplace...”,查找“Bytecode Outline”,点击安装;
  完成安装后,我们就可以打开该视图,从而可以查看java到ASM字节码之间的映射关系:
  
2)使用agent的类注意点:
  需要在其jar包对应MANIFEST.MF文件中添加如下属性项:Premain-Class: com.ucweb.profile.Main,其中Main类中有如下签名方法
  public static void premain(String args, Instrumentation inst)
  agent包依赖ASM库,在其jar包对应MANIFEST.MF文件中添加如下属性项:
  Class-Path: asm-all-3.3.1.jar
  最终对应的MANIFEST.MF文件内容大致如下:

  
  • 源码路径:
 https://hg.ucweb.local/repos/users/yuyj/perf_monitor 请参考工程目录下ReadMe.txt
  • 部署运行,请参考:
 部署_Java应用程序性能监控工具

参考资料

http://www.ibm.com/developerworks/cn/java/j-lo-profiling/?ca=drs- 常用Java Profiling 工具的分析

http://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html SUN官方hprof工具介绍

http://www.ibm.com/developerworks/cn/java/j-lo-jpda2/ JVMTI介绍

http://www.importnew.com/1486.html 深入了解JVM虚拟机

http://asm.ow2.org/index.html ASM介绍

http://jiprof.sourceforge.net/ Java Interactive Profiler

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值