TProfiler工具的使用

#背景
        前两天做了一个新接口,接口的逻辑也比较简单,从第三方拿到数据,做一些封装返回给客户端即可,但压测时发现当QPS为300左右,机器负载已经达到13左右,看了代码半天没有头绪,不知道问题出现在哪一步,所以就在网上查找性能优化的相关工具,觉得TProfiler简单易用、功能强大,就简单介绍下如何使用。
#TProfiler下载与安装
        第一步先去Github TProfiler下载源文件,接着将下载好的TProfiler-master.zip解压并打开文件夹,将dist下的TProfiler_1.0.1.zip再解压,最后将TProfiler_1.0.1中的profile.properties、lib/tprofiler-1.0.1.jar 拷贝出来,我们只需要这两个文件即可。
        第二步我们看下profile.properties中的每个参数的含义。

#基础的一些参数配置,一般使用默认即可
startProfTime = 9:00:00  开始profile的时间点
endProfTime = 23:00:00  结束profile的时间点
eachProfUseTime = 5  profile时间长度(单位秒)
eachProfIntervalTime = 50  两次profile的时间间隔(单位秒)
samplerIntervalTime = 20  两次采样的时间间隔(单位秒)
port = 50000  对外提供服务支持查询的端口号
debugMode = false  是否进入调试模式
needNanoTime = false  是否需要用纳秒记录时间
ignoreGetSetMethod = true  是否忽略采集get/set方法

#logprofiler 和logsampler是原始文件,logmethod在时间结束后才生成
logFilePath = /data/tprofiler/logs/logprofiler.log  profile log的存放位置
methodFilePath = /data/tprofiler/logs/logmethod.log  method log的存放位置
samplerFilePath = /data/tprofiler/logs/logsampler.log   采样数据 log的存放位置

#需要、不需要profile的包路径
excludeClassLoader = org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader  不注入的类加载器(分号分割),使用默认即可
includePackageStartsWith = com.alibaba.fastjson;com.fasterxml.jackson.databind;com/data/itv/v2/util;com/data/itv/v2/api/burrow;com.sun.jersey;com.sun.jmx;org.apache;org.codehaus;org.jdbcdslog;org.mybatis;org.quartz;org.springframework  进行profile的类包名(分号分割),这里按需求,将项目中需要profile的包名入进来即可
excludePackageStartsWith = com.taobao.sketch;org.apache.velocity;com.alibaba;com.taobao.forest.domain.dataobject 不进行profile的类包名(分号分割),使用默认即可

        第三步,在我们设置好profile.properties相关属性后,将这两个文件拷贝到服务器/data/tprofiler/目录下,同时添加jvm启动参数:
        -javaagent:/data/tprofiler/tprofiler-1.0.1.jar
        -Dprofile.properties=/data/tprofiler/profile.properties
        然后启动相应的tomcat、weblogic等服务器,观察输出没有报错即运行。

#TProfiler远程操作
        java -cp /data/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient [ip] [port] [command] 这个命令是用于查看TProfiler的运行情况,ip指运行TProfiler的机器ip,port是上面配置文件中的port,command主要有start、stop、status、flushmethod,flushmethod是将运行过程中采集的数据输出到我们的/data/tprofiler/logs/下,logmethod.log在时间结束后才生成,所以需要提前使用flushmethod手动生成logmethod.log
#TProfiler本地数据统计
##普通方法、线程统计命令
        java -cp /data/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.analysis.SamplerLogAnalysis /data/tprofiler/logs/logsampler.log /data/tprofiler/logs/allmethod.log /data/tprofiler/logs/allthread.log 这条命令里,logsampler.log的路径在配置文件中指定,后面两个日志文件是分析统计后的日志输出路径,一个是所有方法的调用情况,另一个是所有线程的运行状态,从类名也可看出,就是对生成的sampler日志进行统计分析。
##top 统计
        java -cp /data/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.analysis.ProfilerLogAnalysis /data/tprofiler/logs/logprofiler.log /data/tprofiler/logs/logmethod.log /data/tprofiler/logs/topmethod.log /data/tprofiler/logs/topobject.log 前两个参数是原始日志logprofiler.log、logmethod.log的路径,后面两个是分析后日志的输出路径,topmethod.log指调用次数最多的一些方法,topobject指调用次数最多的对象类,调用该命令后,查看topmethod.log的结构如下:
这里写图片描述

#性能优化
        由上面的表格可以定位问题,用时较多的地方都在json解析这一块,考虑由jackjson换为fastjson,但测试结果还是和上图数据差不多,所以最后考虑将json解析改为用其他方式来替换,最终在300qps下负载降到了1-2,优化效果较好。

参考:http://blog.csdn.net/defonds/article/details/52605670
           https://blog.csdn.net/wh0426/article/details/51994054

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值