• 14
  • 13
分享
  • 使用阿里巴巴开源神器Arthas进行性能分析——软件测试圈
  • 曼倩诙谐 2021-01-27 10:16:10 字数 1650 阅读 1193 收藏 13

  Arthas介绍

  Arthas是Alibaba开源的Java诊断工具,采用命令行交互模式,提供了丰富的功能,是Java 相关问题排查和性能优化的强大工具。为了明显区分 CPU 耗时和内存占用,分别写了 string 操作的三种方式:String,StringBuffer,StringBuilder。下面将根据这个Demo来对Arthas 进行介绍。

1.png

  下载

  GitHub下载Arthas(https://github.com/alibaba/arthas) 最新Release版本

  启动

  下载解压后直接用脚本方式“./as.sh”来启动,或者用Java命令“$ java -jar arthas-boot.jar”启动。启动后Arthas会自动列出现有的 Java 进程,输入进程代码进入对应的进程操作页。

2.png

  分析命令

  1. JVM其他相关的命令:查看JVM系统(jvm,sysprop)、环境(sysenv)、日志(logger)、配置及线程堆栈(thread)等信息。

  `dashboard`命令查看进程的CPU、Memory和Runtime等实时数据。

3.png

  2. Class\ClassLoader 相关命令支持查看已加载的类(sc)和方法(sm)相关信息,编译(mc)及反编译(jad)源码,查看 classloader 相关内容。

  `sc`命令展示`StringMonitor`类相关的信息。

4.png

  `sm`命令展示StringMonitor类下相关的方法及stringAppend方法详情。

5.png

  3. 还有一部分程序运行时监测统计分析相关命令(monitor、watch、trace),通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测。

  `watch` 用来观察方法的执行数据包括入参、返回值、抛出异常等其中可用参数params、target、returnObj等可组合表达式进行查看。这里观察了StringMonitor类的stringAppend方法 5 次采样对应的当前对象属性。

6.png

  `trace` 用来查看方法内部调用路径,并输出方法路径上的每个节点上耗时,其中也可附加其他组合参数,比如在方法名后空格后附加 #cost > 10过滤耗时。

7.png

  这里展示了StringMonitor类的stringAppend方法的方法调用路径及当前节点当前步骤的耗时等信息。

  Profiler工具

  Async-Profiler(https://github.com/jvm-profiling-tools/async-profiler#download)是基于HotSpot进行堆栈和内存分配信息的收集和跟踪,可以和OpenJDK、Oracle JDK和其他基于HotSpot JVM的Java应用在运行时协同工作,是一个对系统性能影响很少的Java采样分析器,该工具提供开箱即用的Flame图形支持(也就是常听说的火焰图)。

  使用 `profiler start` 和 `profiler stop` 命令分别开始和停止采集数据。

8.png

  采集到的CPU使用图如下,stringAppend函数在代码中已1/1000的频率执行仍占10.34%的CPU运行时间,而stringBuffer因为保证线程安全的原因耗时也比stringBuilder要多不少,这里限于采样量级较少,数据可能会有些许误差。

9.png

  `profiler start` 命令后面可以加 `--event` 参数指定要采集数据类型,目前支持 cpu(默认)、alloc、lock、wall和itimer等。使用命令 `profiler start --event alloc` 采集内存申请数据如下,stringAppend方法内存申请操作同样占绝大多数,而stringBuffer与stringBuilder在内存申请上并无差异。

10.png



作者:刘正风   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   作为一个工程师,你找工作的敲门砖是什么?是学历?是经验?还是年龄?  从事测试工程师的人员日趋增多,自然而然竞争也会变得激烈。如何让我们的工作履历变的更加精彩,除了我们实际的工作经验之外,能够直观我们技术的还有我们的职业证书,很多公司HR为了增加企业资质库、更快地筛查适合的人员,在招聘时会更倾向于拥有相关证书的应聘者。 今天我们就来盘点软件测试工程师领域含金量较高的几个证书吧! 软件测试工程师必须要了解的4个证书。  1.软件评测师  软件评测师考试(以下简称“软考”)是全国计算机技术与软件专业技术资格考试(简称计算机软件资格考试)的中级考试项目,它属于职业资格考试,又是职称资格考试,具有...
            1 1 10889
            分享
          •  前言日常测试过程中,常常需要多种工具来接力完成自己的接口测试任务。 比如说, 使用swagger查看接口文档, 使用mock编造接口数据对前端页面做测试 使用postman测试后端接口, 用Jmeter来做接口自动化测试/性能测试。 那有没有一款软件可以完美集成以上所有的功能? 笔者发现一款叫Apifox的软件,一款完成能完成以上几乎所有软件的功能。官方给出Apifox(www.apifox.cn )的介绍是:接口管理,开发,测试全流程集成工具,软件的定位是Swagger+Mock+Jmeter+Postman。它能通过一套系统,一份数据,一站式完成接口测试全流程,同时能对api文...
            0 0 1084
            分享
          •   见过不少软件测试岗位,在面试时,问到选择软件测试作为职业的原因时,有不少测试工程师会回答:因为不擅长或不喜欢开发的工作。  这个想法,这个回答,就已经在面试官眼里打低分了。  现在网上也有不少类似观点:  ·“不喜欢开发,那就来选测试吧”  · “测试不需要多少开发知识的”  · “开发太难了,还是测试容易入门”  · “我就是因为不喜欢开发,而选择的测试”  这样的说法已然是割裂了测试和开发的紧密联系,通常反映了开发能力的缺乏(也或许是对开发工作的厌倦)。  实际工作中,测试和开发是“你中有我,我中有你”。  诚然,对于黑盒测试中有些浅显的测试,并不需要多少...
            0 0 812
            分享
          • 在我们自动化过程中,能否构建一个健壮和可靠的测试是UI自动化测试能否成功的关键因素之一。然而在自动化过程中试着去执行的时候,常常会出现各种不同的状况,当使用脚本定位元素或者去验证程序的运行状态时,有时候会发现找不到元素,这可能是由于突然的资源受限或者网络延迟或者机器性能等各种因素引起的响应速度太慢导致的,这时候测试报告就会返回测试失败的结果。其实元素是正常加载的,只是加载的时间晚了一点,那么遇到这种情况我们该怎么解决呢?我们需要在测试脚本中引入延时机制,来使脚本的运行速度与程序元素的加载速度匹配。通俗意义上讲,就是我们需要使脚本和程序的响应能够同步。我们有三种等待机制,强制等待、隐式等待和显式...
            0 0 2117
            分享
      • 51testing软件测试圈微信