• 14
  • 13
分享
  • 使用阿里巴巴开源神器Arthas进行性能分析——软件测试圈
  • 曼倩诙谐 2021-01-27 10:16:10 字数 1650 阅读 1405 收藏 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软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   一、背景  随着各类应用快速和多样化的发展,产品迭代更换频繁,导致业务需求旺盛,开发测试任务源源不断。项目团队通过采取测试分层策略、测试数据治理、自动化回归、性能测试等一系列举措确保系统的安全生产。然而,通过调研发现,投产运行后的缺陷90%以上为性能问题,为我们敲响了性能警钟。为此,项目团队探索打破以项目维度开展性能测试的壁垒,按系统维度进行性能周期性检测,尽可能模拟系统生产运行模式,检验特定情况下是否会有系统级性能问题,降低系统投产的性能风险。  二、探索实践  性能周期性检测实践从性能测试环境建设、性能测试范围选取、测试脚本集准备、性能测试场景设置、性能测试结果对比分析及调优几个维度逐...
            1 1 2535
            分享
          •   面试中遇到的现场编码挑战,特别是那些故意设计来让你失败的挑战,确实会让人感到不悦。这里有12个关于Playwright的面试问题及答案,希望能给你一些优势。  这些问题的创建是为了迷惑你,所以如果你没有答对,也不要对自己太苛刻。同时,一些答案包含解释和代码示例。请滚动到页面底部查看。  1. 本地环境  如果你在本地机器上使用你需要设置并启动的本地环境运行测试,例如在 http://localhost:3000/,你将如何在测试运行期间处理本地环境的设置?  可能的答案:  · 在运行测试之前启动你的本地环境  · 在package.json中编写一个脚本来启动本地环境...
            0 0 701
            分享
          •   大家测试过程中经常用的等价类划分、边界值分析、场景法等,并不能覆盖所有的需求,我们之前讲过很少用到的因果图法,下面就来讲另一种不经常用到但又非常重要的测试用例编写方法——测试大纲法。  测试大纲法适用于有多个窗口,每个窗口有多个动作,每个动作之间有相互的联系的场景,比如说一个手机壳定制功能。  下面我们来说一下步骤:  列提纲  将每个窗口及窗口的动作都列出来。  共有7个页面主页、手机品牌及型号选择页、手机壳外观选择页、提交成功页。  主页的动作有:在线客服、系统使用说明、开始定制。  手机品牌及型号选择页:提交、上一页、下一页。  手机壳外观选择页:提交、上一页、下一页。  提交成功页...
            0 0 1146
            分享
          •   一、十年测试感悟  恍惚间,已经进入测试岗位十年多的时间了,回顾过往,思绪良多,一路走来,或多或少的经历了一些坎坷,也遇到了不少的困难,也曾一时间四顾迷茫,在此,我结合了自己的一些心得,愿本篇文章,能让想进入测试行业的朋友们有一个方向,避免和我一样,独自闯荡江湖还没成为大侠,却已经走了不少弯路。  二、写给刚进入测试岗位的你  刚入测试行业,你会发现自身的期望与现实落差很大,随着时间迁移越来越迷茫,当时的我也是摸着石头过河,随着时代的飞速发展 ,技术的变更也越来越快,测试人员需要学的越来越多,在此给出几点建议。  三、勾画职业蓝图  明确中前期测试工程师本身的发展规划,在此建议大目标、小阶...
            0 0 1289
            分享
          •   前言  通常在接口自动化中,经常会参数关联的问题,那么什么是参数关联?  参数关联就是上一个接口的返回值会被下一个接口当做参数运用,其中Python中可以实现参数关联的方法有很多种,今天小编给大家介绍下,如何通过Python来实现接口自动化中的参数关联。  UnitTest  虽然说目前Pytest框架比较流向,但是目前应该有绝大部分公司还是在使用UnitTest框架,那么小编先介绍下如何通过UnitTest来实现接口自动化的参数关联。  方法一  下面小编通过测试用例返回参数的形式进行实现参数关联。# coding:utf-8 import requests impo...
            0 0 1455
            分享
      • 51testing软件测试圈微信