Tprofiler

不改一行代码定位线上性能问题

时光怂恿深爱的人放手 提交于 2020-12-12 14:51:51
背景 最近时运不佳,几乎天天被线上问题骚扰。前几天刚解决了一个 HashSet 的并发问题,周六又来了一个性能问题。 大致的现象是: 我们提供出去的一个 OpenAPI 反应时快时慢,快的时候几十毫秒,慢的时候几秒钟才响应。 尝试解决 由于这种也不是业务问题,不能直接定位。所以尝试在测试环境复现,但遗憾的测试环境贼快。 没办法只能硬着头皮上了。 中途有抱着侥幸心里让运维查看了 Nginx 里 OpenAPI 的响应时间,想把锅扔给网络。结果果然打脸了; Nginx 里的日志也表明确实响应时间确实有问题。 为了清晰的了解这个问题,我简单梳理了这个调用过程。 整个的流程算是比较常见的分层架构: 客户端请求到 Nginx。 Nginx 负载了后端的 web 服务。 web 服务通过 RPC 调用后端的 Service 服务。 日志大法 我们首先想到的是打日志,在可能会慢的方法或接口处记录处理时间来判断哪里有问题。 但通过刚才的调用链来说,这个请求流程不短。加日志涉及的改动较多而且万一加漏了还有可能定位不到问题。 再一个是改动代码之后还会涉及到发版上线。 工具分析 所以最好的方式就是不改动一行代码把这个问题分析出来。 这时就需要一个 agent 工具了。我们选用了阿里以前开源的 Tprofile 来使用。 只需要在启动参数中加入 -javaagent:/xx/tprofiler.jar

淘宝的TProfiler使用日记

半城伤御伤魂 提交于 2019-11-29 01:25:35
因为最近做项目迁移,迁移之后发现有些地方竟然变慢了!需要一个好的Profiler工具,定位最为耗时的地方。在翻淘宝中间件团队博客 http://rdc.taobao.com/team/jm/ 的时候发现了TProfiler,于是试用了一下。 总体来说使用还算简单,文档虽然说不上面面俱到,但是仍然是能让人上手了。 比较重要的是配置文件,有几个注意点: 配置文件需要所有属性完整,不然会报"IllegalArgumentException source can't be null"。 profile.properties 有一个样例,在man/resources目录下。 eachProfUseTime = 5 #表示每次profiler的时间,一次profiler结束后,写入到tprofiler.log文件中 eachProfIntervalTime = 50 #profiler的间隔 TProfiler是一个线上profile工具,之所以profiler间隔很大,是为了不影响线上业务。建议在测试环境,将eachProfIntervalTime设置成1或者0,eachProfUseTime尽量调大,这样比较好看结果。 还有一个client,可以做flushmethod等操作。如果不主动flush,会等到时间周期结束后才写tmethod.log文件。

使用TProfiler分析并调优项目中的Fastjson序列化代码

北城以北 提交于 2019-11-29 01:25:20
新项目年后就上线了,现在业务上没什么问题,就用 TProfiler 做了下性能分析,果然有坑。 ##一、TProfiler入门 高手请自觉略过本节。 ###1.简介 TProfiler是阿里巴巴开源的一款性能分析工具。号称可以用于生产环境进行长期的性能分析。测试程序部署后,在低峰期对响应时间影响20%,在高峰期对QPS影响30%。详细介绍请见 官方WIKI 。 ###2.简要的实现原理 TProfiler的实现基于JAVA的 Instrumentation 和ASM。 Instrumentation可以理解为一种虚拟机级别的AOP实现 ,无需对项目代码和JDK有任何改动就可以实现AOP功能。TProfiler利用Instrumentation提供的入口,调用ASM将待分析的类的字节码进行修改,加入分析记录方法。在Profiler运行时即可抽样收集到相关类方法的调用信息。使用Instrumentation时也可以通过JVMTI提供的接口实现对类的完全控制。至于 为什么TProfiler会选择ASM ,我想可能有两方面的考虑: 1)性能上更高效。使用JVMTI在每个类装入时都要执行hook程序,而ASM没有明显的性能代价。 2)使用JVMTI对编程难度要求较高,要求对class文件结构和java字节码有深刻了解,而ASM虽然也有一些难度,但是相对来说还是小一些。 ###3.配置

淘宝Tprofiler工具实现分析

不想你离开。 提交于 2019-11-27 17:33:19
项目首页:https://github.com/alibaba/TProfiler 工具介绍 TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对象创建热点 线程状态分析等数据,为查找系统性能瓶颈提供数据支持. TProfiler在JVM启动时把时间采集程序注入到字节码中,整个过程无需修改应用源码.运行时会把数据写到日志文件,一般情况下每小时输出的日志小于50M. 业界同类开源产品都不是针对大型Web应用设计的,对性能消耗较大不能长期使用,TProfiler解决了这个问题.目前TProfiler已应用于淘宝的核心Java前端系统. 部署后低峰期对应用响应时间影响20% 高峰期对吞吐量大约有30%的降低(高峰期可以远程关闭此工具) 同类对比 与同类开源工具jip对比 项目 TProfiler JIP 交互控制 支持远程开关和状态查看 支持远程开关等多种操作 过滤包和类名 支持包和类的过滤 支持包和类的过滤 低消耗 响应时间延长20% QPS降低30%(详细对比看上图) 同等条件下资源消耗较多,使JVM不断的FullGC;Profile时会阻塞其他线程 无本地代码 未使用JVMTI,纯Java开发 未使用JVMTI,纯Java开发 易用性 只有一个jar包,使用简单 模块多,配置使用相对复杂 日志文件