构建自己的监测器【1】-监测工具 注:监控java代码运行情况
2013-10-12 10:04
274 查看
监测器(profiler):
监测器的目的是什么?监测器主要是为了检测程序主要哪些地方耗费资源,可能包括cpu资源,内存资源等。利用监测器可以分析出方法的耗时,程序所占内存资源。根据监测器分析出的信息,可以进行有针对性的优化。
现有的监测方式
1. 最简单的方式 System.out.println()这种方式应该开放最常用最简单的跟踪程序运行情况的方式了。
有一个方法:
[java] view
plaincopy
public void sayHello(){
Thread.sleep(1000);
print("hello world");
}
如果要知道这个方法的耗时,该怎么做呢?最常用的方式就是在方法体前后加入时间戳,如下:
[java] view
plaincopy
public void sayHello(){
long startTime = System.currentTimeMillis();
Thread.sleep(1000);
print("hello world");
long endTime = System.currentTimeMillis();
System.out.println("方法耗时为:"+(endTime-startTime)+"ms");
}
这应该是最原始的方法了。
这个方法的好处就是简单,易于使用,只要在方法前后插入代码就可以了,但是它有很大的不足:
首先、它完全手工,和业务代码耦合性可能会非常高。要监测那个代码,那就在哪个方法中插入上面类似的代码,然后重新编译,打包,部署。监测完之后呢?删除上面的代码,重新打包部署。。(也许做的智能点,可以将上面的代码段是否执行加个开关,但是总体还是很挫的,你说呢?)
其次、这种手工的方式监测可监测的方面太窄了,写一次可能只能监测方法的耗时,下次想监测方法执行次数,那就要重新写一份。
2、jdk自带的hprof: 上面这种方式的缺陷很明显,还好,JDK本身也提供了一些用来分析的工具,比如
J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profiling,叫做HPROF。HPROF实际上是JVM中的一个native的库,它会在JVM启动的时候通过命令行参数来动态加载,并成为 JVM进程的一部分。若要在java进程启动的时候使用HPROF,用户可以通过各种命令行参数类型来使用HPROF对java进程的heap或者 (和)cpu进行profiling的功能。HPROF产生的profiling数据可以是二进制的,也可以是文本格式的。这些日志可以用来跟踪和分析
java进程的性能问题和瓶颈,解决内存使用上不优的地方或者程序实现上的不优之处。二进制格式的日志还可以被JVM中的HAT工具来进行浏览和分析,用 以观察java进程的heap中各种类型和数据的情况。有一个关于hprof的学习文章,有兴趣的可以看看http://longmans1985.blog.163.com/blog/static/706054752011715112723303/
但是hprof也有自己的限制:
hprof分析的是整个JVM容器内的情况,有很多信息是我们不想要的。比如运行jboss时,hprof会把jboss的信息也会分析到。而我们需要的信息只是自己应用代码的,而不需要jboss的,甚至其他三方类库的。
而且利用hprof分析程序是比较慢的,据说利用hprof运行程序会是程序慢20倍,这个我没测试过。但是利用hprof长时间来分析应用程序很明显是不太恰当的。
除了
System.currentTimeMillis()和hprof之外,还有一些其他的分析工具。
除了现有的方式,我们也可以构建自己的监测器:主要是利用java
instrumentation和java代理来实现。javaagent和instrumentation这个东西已经不是新鲜的玩意了,在JDK5的时候引入的,JDK6上又有了一些新的特性。不少监测工具都是构建在instrumentation的基础上的,比如btrace,JIP等。关于java instrumentation的资料,网上搜搜,好像有一大堆的,不过有用的资料也就那几篇。
下一篇就学习下javaagent如何使用吧。
相关文章推荐
- 网络流量监测图形分析工具和linux系统运行监控工具汇总
- 在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)
- 在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)
- 一个自己用的代码备份工具,支持delphi,android,java,可以自己添加配置,灵活支持大部分编程语言
- 实时监控运行中java程序工具:btrace
- Java代码质量监控工具Sonar安装
- 在自己的java代码中编译并运行程序
- 利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 Jtop
- 监测redis服务器运行情况 哨兵工具
- 用VBS调用程序并对程序的运行情况进行监控的两个代码
- 构建自己的监测器【7】-Java Interactive Profiler 翻译文档
- Java代码质量监控工具Sonar安装
- 【JVM】JSTATD结合Java VisualVM进行远程监控JVM运行情况(二)
- 构建自己的监测器【1】-监测工具
- java系统运维:使用java自带的工具监控系统(java)虚机的运行
- 构建自己的监测器【7】-Java Interactive Profiler 翻译文档
- 构建自己的监测工具
- Java千百问_07JVM架构(018)_如何监控jvm的运行情况
- java监控tomcat运行代码
- 构建自己的监测器【2】-javaagent参数使用