1.简介
tprofiler是一个可以在生产环境长期使用的性能分析工具。可以监测每个类,每个方法运行需要多少时间,然后找到性能的瓶颈,这点和jvisualvm这类profiler工具类似。
2.实战
我们准备结合tomcat测一个web应用的性能。这里选取
retwisj来测试。
环境:
Windows7 64bit
JDK 1.7.0_72 64bit
Tomcat 7.0.35
Maven 2.2.1
2.1 首先去git官网将tprofiler的代码clone下来,然后编译
git assembly:assembly
2.2 将TProfiler\pkg\TProfiler\lib\tprofiler-1.0.1.jar复制到apache-tomcat-7.0.35\bin下面,重命名为tprofiler.jar。
2.3 apache-tomcat-7.0.35\bin下面,添加一个文件profile.properties到该目录(文件可以解压jar包找到)
几个参数注意修改:
startProfTime,endProfTime改成测试的时候的时间范围内
logFilePath,methodFilePath,samplerFilePath改对
includePackageStartsWith要注意加入你要监测的类的包名。
我这里改为includePackageStartsWith = org.springframework
但是tprofiler很坑爹,代码里居然把所有org开头的给exclude掉了,所以得改代码
com.taobao.profile.config.ProfFilter
把下面这行注释掉。
//excludePackage.add("org/");
然后改完重新编译打包吧,Σ( ° △ °|||)︴
2.4 apache-tomcat-7.0.35\bin下面,添加一个文件setenv.bat,内容如下
set JAVA_OPTS="-javaagent:tprofiler.jar"
2.5 将retwisj工程clone下来,然后将编译出的retwisj.war放到tomcat的webapp目录下,关于retwisj,可以参考我的另一篇日志
http://xpenxpen.iteye.com/blog/2082966
2.6 启动tomcat
2.7 打开浏览器,http://localhost:8080/retwisj,随便点点
2.8 打开tprofiler客户端,强制刷新查看方法的执行时间
apache-tomcat-7.0.35\bin>java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient 127.0.0.1 50000 flushmethod
2.9 这样就可以看到这个文件了apache-tomcat-7.0.35\bin\logs\tmethod.log
内容大致如下
instrumentclass:1125 instrumentmethod:8228
0 org/springframework/web/SpringServletContainerInitializer:<init>:111
1 org/springframework/web/SpringServletContainerInitializer:onStartup:176
2.10 分析profile日志
apache-tomcat-7.0.35\bin>java -cp tprofiler.jar com.taobao.profile.analysis.ProfilerLogAnalysis logs/tprofiler.log logs/tmethod.log logs/topmethod.log logs/topobject.log
这个命令试下来没用,不知是bug还是什么。我这里不深究了,有tmethod.log也够了。
至此,就可以根据profile日志分析程序的性能瓶颈了。
3.tprofiler原理探究
核心就2个东东:instrument和asm
instrument提供在运行时替换类的字节码的机制,而具体如何编写java字节码则可以用asm或者bcel之类的工具
对于tprofile的源码,稍微看看就行,idea是可以学习借鉴的,但是代码质量,我只能说呵呵吧,大家不要太在意。
4.参考资料
淘宝Tprofiler工具实现分析
Java SE 6 新特性: Instrumentation 新功能
TProfiler部署文档--笔记
Instrumentation: querying the memory usage of a Java object
Measure Java Performance – Sampling or Instrumentation? 本文用aspectj和java instrument结合做profile,看完我对aspectj又有新的认识。原来aspectj也不只是只能在编译期间静态改字节码的,也有和asm一样的运行时动态改字节码的功能。
JIP — The Java Interactive Profiler
分享到:
相关推荐
《TProfiler:高效性能定位工具详解》 在软件开发领域,性能优化是不可或缺的一部分,而TProfiler正是这样一款强大的性能定位工具,由阿里巴巴研发,专为解决程序性能问题而设计。本文将深入探讨TProfiler的功能、...
《TProfiler:深入理解与应用》 TProfiler是一款强大的性能分析工具,主要用于Java应用程序的性能监控和优化。在深入探讨TProfiler之前,我们先要理解什么是性能分析以及它的重要性。在软件开发过程中,性能优化是...
阿里技术团队官方在 github 公布的最新 TProfiler-master.zip 文件。包含 TProfiler 源码、可执行 tprofiler-1.0.1.jar 文件、默认配置 profile.properties。 关于TProfiler实际用法及其注意事项,请参考博客JVM ...
TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对象创建热点 线程状态分析等数据,为查找系统性能瓶颈提供数据支持. TProfiler在JVM...
截至 20160921 阿里技术团队官方在 github 公布的最新 TProfiler-master.zip 文件。包含 TProfiler 源码、可执行 tprofiler-1.0.1.jar 文件、默认配置 profile.properties。 关于TProfiler实际用法及其注意事项,请...
**性能分析工具 TProfiler** TProfiler 是一款专为JAVA开发者设计的强大性能分析工具,它在生产环境中具有良好的适用性,能够帮助开发人员深入理解应用程序的性能瓶颈,优化代码执行效率。TProfiler 提供了剖析...
TProfiler is a code profiling tool. author:shutong.dy@taobao.com Note: TProfiler requires Java6™ VM. Please refer to Wiki for more information: https://github.com/alibaba/TProfiler/wiki The source ...
https://github.com/taobao/TProfiler)产生了兴趣,于是就下下来研究了一下:非常简单小巧,代码质量也很高,最多20个class。其实现的核心原理就是利用javaAgent,在premain函数中使用java.lang.instrument....
此外,还有Eagleeye用于分布式跟踪,Pandora作为隔离容器解决二方包问题,TDDL作为通用数据访问层,TProfiler进行性能分析等。 3. **运行模型**: 阿里运行模型强调高可用性和稳定性,这包括线上压测、容量规划、...
还有WebXProfiler、TProfiler、BTrace、VisualVM等Java相关的分析工具,以及性能分析平台OProfile、Perf和Google-Perftools等。 5. 时间消耗分析与瓶颈查找 在性能分析过程中,时间消耗分析是至关重要的,它有助于...
3. 调试工具:TMS提供了一些强大的调试组件,如TProfiler,可以帮助开发者深入分析代码性能,找出潜在的瓶颈问题。 三、性能优化 TMS Component Pack注重性能优化,所有组件都经过精心设计和优化,能够在不影响...
此外,还有btrace和TProfiler等高级诊断工具,以及Arthas等动态诊断框架。 Java内存模型规定了线程间的数据可见性和原子性,遵循happens-before原则,以保证程序的正确执行。synchronized和volatile关键字用于实现...
在Java工具的使用上,BTrace和TProfiler等工具提供了强大的动态跟踪和分析功能。JMX(Java Management Extensions)则允许远程监控和管理Java应用程序,这对于系统的运维和故障排查非常有用。同时,学习编写各种模拟...
8. 虚拟机性能监控与故障处理工具:jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler 基础知识 1. 读取源代码:String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader &...
- **TProfiler**:阿里巴巴开源的性能分析工具,用于JVM应用的性能监控。 - **HouseMD**:故障诊断工具,可以收集各种信息帮助诊断问题。 - **jmxterm**:基于终端的JMX客户端。 - **TBJMap**:分析JVM堆转储文件的...