加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Java 性能瓶颈分析工具 你知道几个?

发布时间:2019-05-14 14:23:09 所属栏目:建站 来源:程序猿说
导读:0. Introduction Java 机能优化分为许多个方面,如体系优化、算法优化、代码优化等。代码优化是指开拓职员在研发、测试进程中行使机能瓶颈说明器材快速定位出因为编码存在的机能瓶颈题目并一连举办优化。一种很常见的场景是测试同窗在对处事举办压测时,无

最近,在进级网关的焦点成果模块之后与测试同窗一路相助对网关的某些 API 接口举办机能压力测试,操作压测机 Jmeter 模仿多用户并发哀求。但不管怎么增进并发数,每分钟的哀求总量不变保持在 4 万/min,TPS 也一向在 650 阁下颠簸,并且全部处事器的 CPU、内存、收集、IO 占用率均不高。

针对这种环境,我们起首解除了营业方的机能题目,因此直接对营业方(2 核 8G)提倡并发哀求,TPS 都可以到达 800 阁下的并发数。其次,我们也解除了接入层 SLB、OpenResty 的题目,由于网关未进级焦点成果环境下单台网关的 TPS 很轻易到达 4000 阁下。

因此,按照以上说明根基可以确定机能瓶颈出在网关处理赏罚哀求的进程中。

在网关的 JVM 启动参数中增进 JFR 启动参数:

  1. -XX:+UnlockCommercialFeatures -XX:+FlightRecorder 

Java 机能瓶颈说明器材

行使 JFR 的变乱视图点击仓库跟踪,就可以查察到代码挪用链,看到本身的营业代码,从而定位到最耗时的代码位置。

下图很清晰展示了来自客户端每个哀求首要的变乱都淹灭在挪用 Redis 读取 API 元信息,每一次读取源信息都必要举办序列化与反序列化,导致均匀相应时刻增进网关处理赏罚哀求时刻加长,因此 TPS 降落并一向不变在某个值。办理方案 API 元信息尽也许缓存到当地 JVM 内存,优先从当地内存读取数据镌汰会见 Redis 频次。

虽然体系 TPS 上不去的缘故起因也不能仅仅从单一维度说明,要综合起来多维度举办说明,如收集带宽、毗连池、Java 内存打点、HTTP 通讯机制、营业逻辑、体系架构(缓存、数据库等)等等。

2. Tprofiler

TProfiler 是淘宝开源的一个可以在出产情形恒久行使的机能说明器材。它同时支持分解和采样两种方法,记录要领执行的时刻和次数,天生要领热门、工具热门、线程状态说明等数据,为查找体系机能瓶颈提供数据支持。

TProfiler 在 JVM 启动时把时刻收罗措施注入到字节码中,整个进程无需修改应用源码。运行时会把数据写到日记文件,一样平常环境下每小时输出的日记小于 50M。今朝 TProfiler 已应用于淘宝的焦点 Java 前端体系,陈设后低峰期对应用相应时刻影响 20% 岑岭期对吞吐量约莫有 30% 的低落。

2.1 设置陈设

  • 安装 TProfiler

直接下载完备安装包可能下载源码运行 package.bat 剧本可能执行 mvn assembly:assembly呼吁天生 tprofiler.jar 即可。

  • 设置 profile.properties

profile.properties 作为 tprofiler.jar 的设置文件,可以按照现实环境举办调解。

  1. #log file name 
  2. logFileName = tprofiler.log 
  3. methodFileName = tmethod.log 
  4. samplerFileName = tsampler.log 
  5. #basic configuration items 
  6. startProfTime = 19:00:00 #开始举办profile的时刻 
  7. endProfTime = 23:00:00 #竣事profile的时刻 
  8. eachProfUseTime = 5 #profile时刻长度(单元秒) 
  9. eachProfIntervalTime = 50#两次profile的时距离断(单元秒) 
  10. samplerIntervalTime = 20 #两次采样的时距离断 
  11. port = 50000  
  12. debugMode = false  
  13. needNanoTime = false 
  14. ignoreGetSetMethod = true 
  15. #file paths 
  16. logFilePath = /home/admin/tprofiler/logs/${logFileName} 
  17. methodFilePath = /home/admin/tprofiler/logs/${methodFileName} 
  18. samplerFilePath = /home/admin/tprofiler/logs/${samplerFileName} 
  19. #include & excludes items 
  20. excludeClassLoader = org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader 
  21. includePackageStartsWith = com.taobao;com.taobao.common 
  22. excludePackageStartsWith = com.taobao.sketch;org.apache.velocity;com.alibaba;com.taobao.forest.domain.dataobject 
  • 设置 JVM 历程

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读