tprofile 分析程序整体运行状况

1、TProfiler下载与安装

第一步先去Github https://github.com/taobao/TProfiler下载源文件,接着将下载好的TProfiler-master.zip解压并打开文件夹,将dist下的TProfiler_1.0.1.zip再解压,最后将TProfiler_1.0.1中的profile.properties、lib/tprofiler-1.0.1.jar 拷贝出来,我们只需要这两个文件即可。

 

打包

下载源码,在根目录运行package.bat脚本或者执行mvn assembly:assembly命令,将生成的包含依赖的jar包重命名为tprofiler.jar即可

配置

profile.properties作为tprofiler.jar的配置文件,需要和Jar包放在相同的目录(例如/home/admin/tprofiler/),根据实际情况调整配置;如果不显式配置这个文件,将使用默认配置

其中

startProfTime = 9:00:00 开始profile的时间点

endProfTime = 11:00:00 结束profile的时间点

eachProfUseTime = 5 profile时间长度(单位秒)

eachProfIntervalTime = 50 两次profile的时间间隔(单位秒)

samplerIntervalTime = 20 两次采样的时间间隔(单位秒)

debugMode = false 是否进入调试模式

needNanoTime = false 是否需要用纳秒记录时间

ignoreGetSetMethod = true 是否忽略采集get/set方法

logFilePath = /home/admin/logs/tprofiler.log profile log的存放位置

methodFilePath = /home/admin/logs/tmethod.log method log的存放位置

samplerFilePath = /home/admin/logs/tsampler.log sampler log的存放位置

excludeClassLoader = org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader 不注入的类加载器(分号分割)

includePackageStartsWith = com.taobao 进行profile的类包名(分号分割)

excludePackageStartsWith = com.alibaba;com.taobao.forest.domain.dataobject 不进行profile的类包名(分号分割)

部署

在 jvm 启动参数中添加-javaagent:/path/tprofiler.jar -Dprofile.properties=/path/profile.properties,然后重启应用

重启后就会在logFilePath设置的路径下出现log文件,共有3个:

  1. tsampler.log
  2. tprofiler.log
  3. tmethod.log

为了提升性能将method单独输出,此一项改进使log减小为原来的1/8

endProfTime时间到了后才会输出tmethod.log(因为在这个时间之前有些类和方法没有被load,所以选择profile结束后一次性输出method)

远程操作

远程查看状态操作:

java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient 10.232.*.* 端口号 status

远程开始操作:

java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient 10.232.*.* 端口号 start

远程停止操作:

java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient 10.232.*.* 端口号 stop

远程刷出方法数据:

java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient 10.232.*.* 端口号 flushmethod

卸载

在 jvm 启动参数中去掉相关参数 -javaagent:/path/tprofiler.jar -Dprofile.properties=/path/profile.properties, 重启应用即可卸载此工具

注意事项

在采集时间区间内重启应用, 需要手动清空当天生成的日志; 采集时间过去以后, 修改时间区间重新启动应用, 需要手动清空当天生成的日志

 

因为当天日志会续写, 两次采集的日志写到一个文件中, 会导致分析结果不准! 线上长期运行的应用无此问题

 

TProfiler日志分析

tprofiler.log文件格式说明:

线程ID 线程栈深度 方法ID 方法执行时间

13 2 14558 6

13 2 14554 2

13 3 14576 2

13 4 14567 2

13 2 14554 4

13 2 14556 13

分析sampler log命令: java -cp tprofiler.jar com.taobao.profile.analysis.SamplerLogAnalysis d:/tsampler.log d:/method.log d:/thread.log,会生成method.log和thread.log

method.log文件格式说明:

方法信息 采样过程中方法出现次数

org.quartz.simpl.SimpleThreadPool.getNextRunnable(SimpleThreadPool.java:428) 19728

org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:518) 19728

org.quartz.simpl.SimpleThreadPool.access$000(SimpleThreadPool.java:47) 19728

org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51) 17558

thread.log文件格式说明:

线程信息 采样过程中线程出现次数

56 DefaultQuartzScheduler_Worker-3 TIMED_WAITING 661

55 DefaultQuartzScheduler_Worker-2 TIMED_WAITING 661

60 DefaultQuartzScheduler_Worker-7 TIMED_WAITING 661

分析profiler log命令: java -cp tprofiler.jar com.taobao.profile.analysis.ProfilerLogAnalysis d:/tprofiler.log d:/tmethod.log d:/topmethod.log d:/topobject.log,会生成topmethod.log和topobject.log

topmethod.log文件格式说明:

方法信息 执行次数 平均执行时间 全部执行时间

org/apache/velocity/runtime/parser/node/ASTBlock:render:74 38954 28 1101570

org/apache/velocity/runtime/parser/node/SimpleNode:render:338 39202 21 820064

topobject.log文件格式说明:

方法信息 执行次数 平均执行时间 全部执行时间

sketch/compile/parser/node/PropertyExecutor:<init>:32 573 1 636

 

sketch/util/introspection/UberspectImpl:<init>:282 34 7 241

转载于:https://my.oschina.net/jumpLee/blog/1529434

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值