前言
在上一期主要讲到VisualJVM的使用。这一节章节去讲述Tprofiler的基本使用。
总体介绍
TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对象创建热点 线程状态分析等数据,为查找系统性能瓶颈提供数据支持.
TProfiler在JVM启动时把时间采集程序注入到字节码中,整个过程无需修改应用源码.运行时会把数据写到日志文件,一般情况下每小时输出的日志小于50M.
业界同类开源产品都不是针对大型Web应用设计的,对性能消耗较大不能长期使用,TProfiler解决了这个问题.目前TProfiler已应用于淘宝的核心Java前端系统.
部署后低峰期对应用响应时间影响20% 高峰期对吞吐量大约有30%的降低(高峰期可以远程关闭此工具。
具体配置
下载下发Tprofie
将dist下的TProfiler_1.0.1.zip再解压
Tprofile配置文件
profile.prperties
#log file namelogFileName = tprofiler.log // 日志文件名methodFileName = tmethod.log // 调用方法文件名samplerFileName = tsampler.log // 取样器文件名#basic configuration itemsstartProfTime = 9:00:00 // 开始监控时间endProfTime = 11:00:00 // 结束监控时间eachProfUseTime = 5 // profile时间长度(单位秒)eachProfIntervalTime = 50 // 两次profile的时间间隔(单位秒)samplerIntervalTime = 20 // 两次采样的时间间隔(单位秒)port = 50000 // 对外提供服务支持查询的端口号debugMode = false // 是否进入调试模式needNanoTime = false //是否需要用纳秒记录时间ignoreGetSetMethod = true //是否忽略采集get/set方法#file paths 日志的存放路径、名称可以自行设置logFilePath = ${user.home}/logs/${logFileName} //profile 日志文件存放位置methodFilePath = ${user.home}/logs/${methodFileName} // 调用方法日志文件存放位置samplerFilePath = ${user.home}/logs/${samplerFileName} // 取样器文件存放位置#include & excludes items 需要、不需要profile的包路径excludeClassLoader = org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader //不注入的类加载器(分号分割),使用默认即可includePackageStartsWith = com.xxx;com.xxx.common //(进行profile的类包名(分号分割)这里按需求将项目中需要profile的包名入进来即可)excludePackageStartsWith = com.taobao.sketch;org.apache.velocity;com.alibaba;com.taobao.forest.domain.dataobject //不进行profile的类包名(分号分割),使用默认即可
关键配置项
excludeClassLoader
includePackageStartsWith
excludePackageStartsWith
上传服务器
解压缩压缩包
unzip TProfiler_1.0.1.zip
修改Tomcat配置及设置jvm参数
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/javaee/tomcat/tprofiler/lib/tprofiler-1.0.1.jar -Dprofile.properties=/javaee/tomcat/tprofiler/profile.propertie"
Tprofile远程操作
查看tprofile状态
$ java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient ip.xx.yy.zz 30000 status
停止Tprofiler
$ java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient ip.xx.yy.zz 30000 stop
启动Tprofiler
$ java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient ip.xx.yy.zz 30000 start
输出采集日志
$ java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient ip.xx.yy.zz 30000 flushmethod
TopMethod统计
$ java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.analysis.ProfilerLogAnalysis ~/logs/tprofiler.log ~/logs/tmethod.log ~/logs/topmethod.log ~/logs/topobject.log
根据topmethod.log统计结果,可以拿到热点方法。方法的调用次数,平均执行时间,采样时间内的总时间,根据这些慢方法进行分析代码进行优化。
导致慢方法的几个原因
大规模的嵌套循环
SQL慢查询
某些API的执行效率
优化方向
静态数据使用缓存
优化SQL
使用效率高的公共API