zoukankan      html  css  js  c++  java
  • TProfiler部署文档--笔记

    TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对象创建热点 线程状态分析等数据,为查找系统性能瓶颈提供数据支持.
    TProfiler在JVM启动时把时间采集程序注入到字节码中,整个过程无需修改应用源码.运行时会把数据写到日志文件,一般情况下每小时输出的日志小于50M.
    业界同类开源产品都不是针对大型Web应用设计的,对性能消耗较大不能长期使用,TProfiler解决了这个问题.目前TProfiler已应用于淘宝的核心Java前端系统.
    部署后低峰期对应用响应时间影响20% 高峰期对吞吐量大约有30%的降低(高峰期可以远程关闭此工具)

    下载:
    Tomcat:http://tomcat.apache.org/
    JDK:http://www.oracle.com/technetwork/cn/index.html
    TProfiler:https://github.com/alibaba/TProfiler
    Maven:http://maven.apache.org/

    1. Tomcat+JDK环境
    tar zxvf  jdk-7u21-linux-x64.tar.gz -C /data/module/
    vim /etc/profile
    export JAVA_HOME=/data/module/jdk1.7.0_21
    export JRE_HOME=$JAVA_HOME/jre
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JRE_HOME/lib:$CLASSPATH
    source /etc/profile

    tar zxvf apache-tomcat-7.0.42.tar.gz -C /data/module/
    cd /data/module/
    mv apache-tomcat-7.0.42 tomcat-7.0.42

    启动tomcat
    sh tomcat-7.0.42/bin/startup.sh
    访问:http://localhost:8080/
    OK没问题,tomcat+jdk完成。

    2. 搭建Maven环境
    tar zxvf apache-maven-3.1.1-bin.tar.gz -C /data/module/
    cd /data/module/
    mv apache-maven-3.1.1 maven-3.1.1
    设置maven环境,也可写入profile文件
    export PATH=/data/module/maven-3.1.1/bin:$PATH

    执行mvn命令,显示以下信息就OK
    mvn -v
    Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:22+0800)

    3. 编译TProfiler源码文件
    tar zxvf tprofiler-master.zip -c /data/module/
    cd /data/module/TProfiler
    sh package.bat
    [INFO] Scanning for projects...
    ......
    ......
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1:47.779s
    [INFO] Finished at: Sun Oct 13 11:59:46 CST 2013
    [INFO] Final Memory: 16M/116M
    [INFO] ------------------------------------------------------------------------

    OK,以上显示编译成功。

    解压TProfile ZIP包
    unzip /data/module/TProfiler/dist/TProfiler_1.0.1.zip
    opt目录新建TProfile文件夹
    mkdir -p /opt/tprofiler
    cp /data/module/TProfiler/dist/profile.properties /opt/tprofiler/
    cp /data/module/TProfiler/dist/lib/tprofiler-1.0.1.jar  /opt/tprofiler/

    OK tprofile准备OK,接下来tomcat jvm启动参数配置tprofiler

    4. tomcat jvm配置tprofiler
    修改catalina.sh,添加以下内容:
    vim bin/catalina.sh
    JAVA_OPTS="-javaagent:/opt/tprofiler/tprofiler-1.0.1.jar -Dprofile.properties=/opt/tprofiler/profile.properties"

    启动tomcat
    sh /data/module/tomcat-7.0.42/bin/startup.sh
    tail -f /data/module/tomcat-7.0.42/logs/catalina.out

    启动进程可以看到tprofiler jar包文件
    root     30769     1  1 12:50 pts/2    00:00:03 /data/module/jdk1.7.0_21/jre/bin/java -Djava.util.logging.config.file=/data/module/tomcat-7.0.42/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/opt/tprofiler/tprofiler-1.0.1.jar -Dprofile.properties=/opt/tprofiler/profile.properties -Djava.endorsed.dirs=/data/module/tomcat-7.0.42/endorsed -classpath /data/module/tomcat-7.0.42/bin/bootstrap.jar:/data/module/tomcat-7.0.42/bin/tomcat-juli.jar -Dcatalina.base=/data/module/tomcat-7.0.42 -Dcatalina.home=/data/module/tomcat-7.0.42 -Djava.io.tmpdir=/data/module/tomcat-7.0.42/temp org.apache.catalina.startup.Bootstrap start

    我是用root启动,默认在宿主目录有logs文件夹,下面会有tprofiler生成logs文件:tmethod.log  tprofiler.log  tsampler.log

    5. TProfiler远程操作
    java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient [10.232.*.*] [port] status       #远程查看状态操作
    java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient [10.232.*.*] [port] start        #远程开始操作
    java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient [10.232.*.*] [port] stop         #远程停止操作
    java -cp tprofiler.jar com.taobao.profile.client.TProfilerClient [10.232.*.*] [port] flushmethod  #远程刷出方法数据

    写成脚本
    TPF=/opt/tprofiler/tprofiler-1.0.1.jar
    COM=com.taobao.profile.client.TProfilerClient
    java -cp $TPF $COM [10.232.*.*] [port] <start/stop/status/flushmethod>

    6. 远程操作验证:
    默认端口是50000,我修改为30000,其他配置profile.properties 
    profile.properties默认配置:
    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的类包名(分号分割)

    root@kinval:~# java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient 127.0.0.1 30000 status
    running
    root@kinval:~# java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient 127.0.0.1 30000 stop
    root@kinval:~# java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient 127.0.0.1 30000 status
    stop
    root@kinval:~# java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient 127.0.0.1 30000 start
    root@kinval:~# java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient 127.0.0.1 30000 status
    running

    远程刷出数据:
    root@kinval:~/logs# java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.client.TProfilerClient 127.0.0.1 30000 flushmethod
    root@kinval:~/logs# cat tmethod.log 
    instrumentclass:0 instrumentmethod:0
    instrumentclass:0 instrumentmethod:0
    instrumentclass:0 instrumentmethod:0
    instrumentclass:0 instrumentmethod:0
    instrumentclass:0 instrumentmethod:0

    7. TProfiler日志分析
    tprofiler生成日志:
    tmethod.log
    tprofiler.log
    tsampler.log

    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
    java -cp /opt/tprofiler/tprofiler-1.0.1.jar com.taobao.profile.analysis.SamplerLogAnalysis /root/logs/tsampler.log /root/logs/method.log /root/logs/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 /root/logs/tprofiler.log /root/logs/tmethod.log /root/logs/topmethod.log /root/logs/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




  • 相关阅读:
    linux red hat 安装svn
    java 发送post请求参数中含有+会转化为空格的问题
    MySQLFabric概述
    Checkstyle-Configuration
    CheckStyle检查规则中文翻译
    编码规范系列(一):Eclipse Code Templates设置
    pom配置详解
    maven配置(安装&使用&私服)文档
    maven最全教程
    cmd命令大全/cmd命令提示符大全
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7448898.html
Copyright © 2011-2022 走看看