Arthas 初探--安装初步适用
作者 | agmtopy
由于在项目中遇到一种情况,某段代码在进行单元测试和在 tomcat 容器中运行的性能相差数百倍,因此需要分析在不同环境下某个方法执行的具体时间,从而确定问题。Arthas 可以做到无侵入的监控应用远行情况。
安装:
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
linux 下直接执行,window 下载文件后执行。

执行完成后,显示当前 path 中指定的 JDK 中正在运行的 java 进程输入相应序号,进入 sh 命令,表示已连接成功。

初步使用
Arthas 命令初步使用,大概分为 5 类:
基础命令
- help——查看命令帮助信息
- cat——打印文件内容,和 linux 里的 cat 命令类似
- pwd——返回当前的工作目录,和 linux 命令类似
- cls——清空当前屏幕区域
- session——查看当前会话的信息
- reset——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
- version——输出当前目标 Java 进程所加载的 Arthas 版本号
- history——打印命令历史
- quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
- shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出
- keymap——Arthas快捷键列表及自定义快捷键
jvm相关
- dashboard——当前系统的实时数据面板
- thread——查看当前 JVM 的线程堆栈信息
- jvm——查看当前 JVM 的信息
- sysprop——查看和修改 JVM 的系统属性
- sysenv——查看 JVM 的环境变量
- getstatic——查看类的静态属性
- New! ognl——执行 ognl 表达式
- New! mbean——查看 Mbean 的信息
class/classloader相关
- sc——查看 JVM 已加载的类信息
- sm——查看已加载类的方法信息
- jad——反编译指定已加载类的源码
- mc——内存编绎器,内存编绎 .java 文件为 .class 文件
- redefine——加载外部的 .class 文件,redefine 到 JVM 里
- dump——dump 已加载类的 byte code 到特定目录
- classloader——查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
monitor/watch/trace 相关
请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 shutdown 或将增强过的类执行 reset 命令。
- monitor——方法执行监控
- watch——方法执行数据观测
- trace——方法内部调用路径,并输出方法路径上的每个节点上耗时
- stack——输出当前方法被调用的调用路径
- tt——方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
options
- options——查看或设置 Arthas 全局开关
使用实列
- trace 分析每个方法的具体执行时间

通过图示表明调用 MongoTemplate.executeFindMultiInternal() 方法时,最耗时的方法是在 doWith() 方法,总共执行 10000 次,耗时 ==252.3064ms==,最少一次调用耗时 ==0.0132ms==,最大一次耗时 ==38.4329ms==,分析原因还是在于数据量太大,MongoTemplate 通过循环遍历出结果在进行序列化。
- jad 反编译代码工具
jad com.sankuai.inf.leaf.common.ZeroIDGen

- watch 查看输入参数与输出参数
watch com.sankuai.inf.leaf.server.service.SegmentService getId '{params, target, returnObj}' -x 2
params 表示入参,target 表示当前的类,returnObj 表示返回值。

- stack 查看被调用的路径(向上)
stack com.sankuai.inf.leaf.server.service.SegmentService getId

- sc 查看 JVM 已加载的类信息
sc -d com.sankuai.inf.leaf.server.service.SegmentService getId

- thread 分析死锁
thread b


可以看出当前线程正在等待 ReentrantLock$NonfairSync@118f1fb4,而持有这个对象的线程又在等待当前线程释放,从而形成死锁!
- thread 分析 CPU 占用

总结
先放一张官方的总结大图:

总结:Arthas 是一个很优秀的 java 诊断工具,无论是安装还是使用都很简洁,并且使用文档全面、清晰明了,值得好好研究一番。
原文链接
本文为阿里云原创内容,未经允许不得转载。
Arthas 初探--安装初步适用的更多相关文章
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- RabbitMq初探——安装
rabbitmq Server安装 rabbitmq server安装很简单. 安装erlang环境 rpm -ihv erlang-18.1-1.el6.x86_64.rpm rpm -ihv ra ...
- Unity3D游戏开发初探—3.初步了解U3D物理引擎
一.什么是物理引擎? 四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础.牛顿有句话是这么说的:“如果说我看得比较远的话,那是因为我站在巨人的肩膀 ...
- cnetos6.4 x64 阿里云环境初探--安装pip,及pymysql
由于以前帮朋友买过阿里云服务器,一直以为,不能再体验新用户免费了,由于最近比较有心情研究python,linux,就报着侥幸的心理,重新注册一个帐号试一下,注册完之后,惊奇的发现,原来阿里只要是新注册 ...
- Visual Studio 2017 RC 初探安装
上次看到博客介绍 Visual Studio 2017 RC,看到其中一个改进是启动很快,这是一大进步,也是低配电脑的程序员的期望.不过还没体验,是驴是骡子拉出来看看,这不就开始下载. 1.打开官网: ...
- zanphp 初探----安装篇
安装 zanphp 的安装详细步骤具体在 http://zanphpdoc.zanphp.io/,但是安装的时候,还是踩了一些坑,Mac 和 Ubuntu 我都安装过, 分享大家注意一下. PHP 版 ...
- Linux centos nginx下载安装初步
下载源码包解压编译 1.下载 # wget http://nginx.org/download/nginx-1.9.9.tar.gz 2.解压 # tar xvf nginx-1.9.9.tar.gz ...
- FreeMarker初探--安装FreeMarker
这里安装FreeMarker相当简单,不需要真正的安装过程.仅仅是拷贝 lib/freemarker.jar 到你 Java 应用程序的路径中,让类加载器可以发现它.比如,如果你在 Web 使用了 F ...
- 百度BAE环境下WordPress安装教程
不了解代码的童鞋慎重使用这种方法哦,安装过程中可能会出现一些简单的错误. 前两天有位网友在QQ上联系我,他告诉我自己在百度BAE上安装WordPress程序总是出错.我让他按照网络上的教程逐步安装,但 ...
- 在Fedora8上安装jdk-7u25-linux-i586.rpm的步骤
按:我们身处一个信息爆炸的年代,当有事不决时,打开搜索引擎瞬息间就能得到海量的答案.但是,这未必会让你的问题迎刃而解,因此很多“答案”会把你引向错误的方向,浪费你的时间.希望搜索引擎能有所改进,对明确 ...
随机推荐
- 一次对requirements环境的配置
事情是这样的,我需要跑通一个代码,因此要配置环境,但是并不能利用requirements中给的指令直接配置,于是开始找一些其他的解决方法.作为一名小白,总是绕很多弯路. 记下一些蜿蜒. 首先,摘录re ...
- vue入门教程之-组件
vue入门教程之-组件 欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请注明出处 https://www ...
- StableSwarmUI:功能强大且易于使用的Stable Diffusion WebUI
StableSwarmUI是一个模块化和可定制的Stable Diffusion WebUI,最近发布了0.6.1-Beta版本.这个开源项目,托管在GitHub上:https://github.co ...
- 安装npm install报错npm ERR! code ETIMEDOUT npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/webpack-subresource-integrity failed, reason
执行命令:npm run dev 启动前端项目报如下错误,vue-cli-service是Vue一个启动的插件,需要安装 D:\nodejs\npm.cmd run dev > yuntan1h ...
- 记录--JS 的垃圾回收机制
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 垃圾回收(Garbage Collection)是一种内存管理机制,用于检测和清理不再被程序使用的内存,这些不再被使用的内存就被称为 ...
- C++ Concurrency in Action 读书笔记二:用mutex互斥锁保护在线程间共享的数据
Chapter 3 线程间共享数据 3.2 用互斥锁保护共享数据
- Clang开发注意事项
Clang tools need their builtin headers and search for them the same way Clang does. Thus, the defaul ...
- Failed to start component [StandardEngine[Catalina].StandardHost[localhost]] 记录
jar包冲突 解决: <dependency> <groupId>org.springframework.cloud</groupId> <a ...
- STM32中RFID模块(MFRC522)简单应用
1. 前言 此篇只是对RFID模块的简单概述以及应用,没有原理,对提供的店家提供的代码,进行注释,以及简单使用流程 2. 函数 //功 能:寻卡 //参数说明: req_code[IN]:寻卡方式 ...
- Linux是什么与如何学习
重点回顾 操作系统(Operation System) 主要在管理与驱动硬件,因此必须要能够管理内存.管理装置. 负责行程管理以及系统呼叫等等.因此,只要能够让硬件准备妥当(Ready)的情况, 就是 ...