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

TProfiler部署文档--笔记的更多相关文章

  1. PPTP部署文档

    PPTP部署文档 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.       欢迎加入:高级运维工程师之路 598432640 前言:这款VPN部署起来特别简单,想对OPENVON配 ...

  2. hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档

    相关内容: hadoop2.5.2汇总:新增功能最新编译 32位.64位安装.源码包.API.eclipse插件下载Hadoop2.5 Eclipse插件制作.连接集群视频.及hadoop-eclip ...

  3. supervisor 部署文档

    supervisor 部署文档 supervisor 需要Python支持,如果不用系统的supervisor,单独安装python python 安装 #依赖 yum install python- ...

  4. centos6 Cacti部署文档

    centos6 Cacti部署文档 1.安装依赖 yum -y install mysql mysql-server mysql-devel httpd php php-pdo php-snmp ph ...

  5. HP DL160 Gen9服务器集群部署文档

    HP DL160 Gen9服务器集群部署文档 硬件配置=======================================================Server        Memo ...

  6. Sqlserver2008安装部署文档

    Sqlserver2008部署文档 注意事项: 如果你要安装的是64位的服务器,并且是新机器.那么请注意,你需要首先需要给64系统安装一个.net framework,如果已经安装此功能,请略过这一步 ...

  7. ABP文档笔记系列

    ABP文档笔记 - 模块系统 及 配置中心 ABP文档笔记 - 事件BUS ABP文档笔记 - 数据过滤 ABP文档笔记 - 规约 ABP文档笔记 - 配置.设置.版本.功能.权限 ABP文档笔记 - ...

  8. CDH简易离线部署文档

        CDH 离线简易部署文档       文档说明 本文为开发部署文档,生产环境需做相应调整. 以下操作尽量在root用户下操作,避免权限问题. 目录 文档说明 2 文档修改历史记录 2 目录 3 ...

  9. Ceph分布式存储(luminous)部署文档-ubuntu18-04

    Ceph分布式存储(luminous)部署文档 环境 ubuntu18.04 ceph version 12.2.7 luminous (stable) 三节点 配置如下 node1:1U,1G me ...

随机推荐

  1. SNMP相关的RFC建议和链接

    1. SNMP Books or Articleshttp://www.faqs.org/faqs/snmp-faq/part1/http://www.faqs.org/faqs/snmp-faq/p ...

  2. Modelsim中使用TCL脚本编写do文件实现自动化仿真

    通常我们使用Modelsim进行仿真,是通过图形界面点点点来进行操作,殊不知Modelsim完美支持TCL脚本语言及批处理命令do文件.简单来说就是从你修改完代码后到你重新编译把需要的信号拉出来查看, ...

  3. 关闭ipv6的方法

    公司研发反应,几台机器开了一些端口,但是访问一直不通. 检查后发现,发现服务开启的是ipv6的端口,所有首先想到的办法就是关闭ipv6. 关闭ipv6的方法有两种: 第一个是在内核配置文件修改配置(p ...

  4. 从JavaWeb危险字符过滤浅谈ESAPI使用

    事先声明:只是浅谈,我也之用了这个组件的一点点. 又到某重要XX时期(但愿此文给面临此需求的同仁有所帮助),某Web应用第一次面临安全加固要求,AppScan的安全测试报告还是很清爽的,内容全面,提示 ...

  5. Android Studio使用手记

    1.官方的Tip and Tricks:http://developer.android.com/intl/zh-cn/sdk/installing/studio-tips.html 2.项目的目录树 ...

  6. js中window对象的opener属性的一个坑

    2018-05-08 17:48:33 今天我编写代码碰到了一个让我纠结了很久的坑,特别想在此说一下,让其他人避免我踏过的这个坑. 这个坑就是:在我自己写的子窗口中用opener属性却获取不到父窗口的 ...

  7. Java虚拟机-垃圾收集器

    垃圾收集器(Garbage Collection, GC)的诞生引导出了三个问题: 哪些内存需要回收? 什么时候回收? 如何回收? 对于线程独占的三个区域(程序计数器.虚拟机栈.本地方法栈)不用过多的 ...

  8. python笔记:#003#PyCharm 的初始设置

    PyCharm 的初始设置(知道) 目标 恢复 PyCharm 的初始设置 第一次启动 PyCharm 新建一个 Python 项目 设置 PyCharm 的字体显示 PyCharm 的升级以及其他 ...

  9. 详解CSS选择器、优先级与匹配原理【转】

    作为一个Web开发者,掌握必要的前台技术也是很重要的,特别是在遇到一些实际问题的时候.这里给大家列举一个例子: 给一个p标签增加一个类(class),可是执行后该class中的有些属性并没有起作用.通 ...

  10. 洛谷 P1054 解题报告

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...