锋利的开罐器-Arthas

官网:https://arthas.aliyun.com/
github:https://github.com/alibaba/arthas

做什么的?

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

具体的引用场景

  • CPU飙高,什么原因造成的?
  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  • 是否有一个全局视角来查看系统的运行状况?
  • 有什么办法可以监控到 JVM 的实时运行状态?
  • 怎么快速定位应用的热点,生成火焰图?
  • 怎样直接从 JVM 内查找某个类的实例?
- base64 - base64 编码转换,和 linux 里的 base64 命令类似
[arthas@70070]$ echo 'abc' > /tmp/test.txt
[arthas@70070]$ cat /tmp/test.txt
abc
[arthas@70070]$ base64 /tmp/test.txt
YWJjCg==

基础命令

- cat - 打印文件内容,和 linux 里的 cat 命令类似
- cls - 清空当前屏幕区域
- echo - 打印参数,和 linux 里的 echo 命令类似
- grep - 匹配查找,和 linux 里的 grep 命令类似
- help - 查看命令帮助信息
- history - 打印命令历史
- pwd - 返回当前的工作目录,和 linux 命令类似
- reset - 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
- session - 查看当前会话的信息
[arthas@19836]$ sessionName        Value
--------------------------------------------------JAVA_PID    19836SESSION_ID  d864f3f9-a139-473d-951c-0fa8039ea901
- quit - 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
- stop - 关闭 Arthas 服务端,所有 Arthas 客户端全部退出
- tee - 复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似
- version - 输出当前目标 Java 进程所加载的 Arthas 版本号
- - keymap - Arthas 快捷键列表及自定义快捷键

image.png

JVM相关命令

- dashboard - 当前系统的实时数据面板🔥

image.png
image.png

- thread - 查看当前 JVM 的线程堆栈信息🔥

image.png

- jvm - 查看当前 JVM 的信息🔥
- sysprop - 查看和修改 JVM 的系统属性
- sysenv - 查看 JVM 的环境变量
- vmoption - 查看和修改 JVM 里诊断相关的 option
- getstatic - 查看类的静态属性
- ognl - 执行 ognl 表达式
ognl '@java.lang.System@out.print("wangzijian")'[arthas@19836]$ ognl '@demo.MathGame@random'
@Random[serialVersionUID=@Long[3905348978240129619],seed=@AtomicLong[7988179685469],multiplier=@Long[25214903917],addend=@Long[11],mask=@Long[281474976710655],DOUBLE_UNIT=@Double[1.1102230246251565E-16],BadBound=@String[bound must be positive],BadRange=@String[bound must be greater than origin],BadSize=@String[size must be non-negative],seedUniquifier=@AtomicLong[199880078823418412],nextNextGaussian=@Double[0.0],haveNextNextGaussian=@Boolean[false],serialPersistentFields=@ObjectStreamField[][isEmpty=false;size=3],unsafe=@Unsafe[sun.misc.Unsafe@64911ac2],seedOffset=@Long[24],
]
- heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能
- logger - 查看和修改 logger
- mbean - 查看 Mbean 的信息
- memory - 查看 JVM 的内存信息
- perfcounter - 查看当前 JVM 的 Perf Counter 信息
- vmtool - 从 jvm 里查询对象,执行 forceGc

Class、ClassLoader相关命令

- sc(Search Class) - 查看 JVM 已加载的类信息
[arthas@19836]$ sc demo.MathGame -dclass-info        demo.MathGamecode-source       /D:/arthas/math-game.jarname              demo.MathGameisInterface       falseisAnnotation      falseisEnum            falseisAnonymousClass  falseisArray           falseisLocalClass      falseisMemberClass     falseisPrimitive       falseisSynthetic       falsesimple-name       MathGamemodifier          publicannotationinterfacessuper-class       +-java.lang.Objectclass-loader      +-sun.misc.Launcher$AppClassLoader@5c647e05+-sun.misc.Launcher$ExtClassLoader@28d93b30classLoaderHash   5c647e05
- sm(Search Method) - 查看已加载类的方法信息
[arthas@19836]$ sm  java.lang.Integer
java.lang.Integer <init>(I)V
java.lang.Integer <init>(Ljava/lang/String;)V
java.lang.Integer numberOfLeadingZeros(I)I
java.lang.Integer numberOfTrailingZeros(I)I
java.lang.Integer bitCount(I)I
java.lang.Integer equals(Ljava/lang/Object;)Z
java.lang.Integer toString(II)Ljava/lang/String;
java.lang.Integer toString()Ljava/lang/String;
java.lang.Integer toString(I)Ljava/lang/String;
java.lang.Integer hashCode(I)I
java.lang.Integer hashCode()I
java.lang.Integer min(II)I
java.lang.Integer max(II)I
- jad - 反编译指定已加载类的源码🔥
[arthas@19836]$ jad demo.MathGame printClassLoader:
+-sun.misc.Launcher$AppClassLoader@5c647e05+-sun.misc.Launcher$ExtClassLoader@28d93b30Location:
/D:/arthas/math-game.jarpublic static void print(int number, List<Integer> primeFactors) {StringBuffer sb = new StringBuffer(number + "=");
/*34*/     for (int factor : primeFactors) {
/*35*/         sb.append(factor).append('*');}
/*37*/     if (sb.charAt(sb.length() - 1) == '*') {
/*38*/         sb.deleteCharAt(sb.length() - 1);}
/*40*/     System.out.println(sb);}Affect(row-cnt:1) cost in 97 ms.
- mc - 内存编译器,内存编译.java文件为.class文件
- redefine - 加载外部的.class文件,redefine 到 JVM 里🔥❗
- classloader - 查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
- dump - dump 已加载类的 byte code 到特定目录
- retransform - 加载外部的.class文件,retransform 到 JVM 里

http://zjyun.cc/wordpress/2809435016662

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144046.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Facebook耐用号养成攻略!如何实现自动化高效养号

在跨境电商领域&#xff0c;Facebook 已经成为一个不可或缺的推广和营销平台。然而&#xff0c;想要在 Facebook 上取得成功&#xff0c;有一批耐用的 Facebook 账号是必不可少的。养出一批 Facebook 耐用号可以不仅可以大幅度提高推广效率&#xff0c;更能有效降低营销成本&am…

基于DTW算法的命令字识别

DTW算法介绍 DTW(Dynamic Time Warping)&#xff1a;按距离最近原则&#xff0c;构建两个序列之间的对应的关系&#xff0c;评估两个序列的相似性。 要求&#xff1a; 单向对应&#xff0c;不能回头&#xff1b;一一对应&#xff0c;不能有空&#xff1b;对应之后&#xff0…

Fireboom on Sealos:半小时搞定一个月的接口工作

后端日常开发工作中有 88% 的接口都是 CURD&#xff0c;占用了超过 6 成开发时间。这些工作枯燥乏味&#xff0c;且价值低下&#xff0c;不仅荒废了时间&#xff0c;还无法获得任何成就感。而 Fireboom 可在 2 分钟内&#xff0c;完成传统模式下 2 天才能完成的接口&#xff0c…

面试题:你是如何计划和组织一个大型的软件测试项目的?

今天我们讲个软件测试的面试问题&#xff1a;你是如何计划和组织一个大型的软件测试项目的&#xff1f; 这种题目&#xff0c;就是看你的流程梳理&#xff0c;一定要在回答的步骤前面加上1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;自己就能很清晰&#xff0c;面试…

Java | CMD命令认识Java

文章目录 1. CMD命令2. Java概念1.1 Java是什么&#xff1f;1.2下载和安装1.2.1 下载1.2.2 安装1.2.3 JDK的安装目录介绍 1.3 Java语言的发展1.4 Java的三大平台1.4.1 JavaSE1.4.2 JavaME1.4.3 JavaEE 1.5 Java的主要特性1.5.1 Java语言跨平台的原理 1.6 Java中认识 JRE 和 JDK…

c++颜色空间转换

c颜色空间转换 cvtColor函数标识符颜色空间转换的类型 cvtColor函数使用不同的标识符来表示颜色空间转换的类型。这些标识符通常位于OpenCV的cv命名空间中&#xff0c;并以cv::COLOR_作为前缀。以下是一些常用的cvtColor函数标识符&#xff1a; BGR到灰度&#xff1a; cv::CO…

龙迅LT6911GX 是一款高性能HDMI 2.1转MIPIDSI/CSI或者LVDS的转接器

龙迅LT6911GX 支持高达8K30HZ得分辨率 1. 描述 LT6911GX 是一款面向 VR/ 显示应用的高性能 HDMI2.1 至 MIPI 或 LVDS 芯片。 高清遥控器RX作为高清电脑中继器的上游&#xff0c;可与其他芯片的高清电脑TX合作&#xff0c;实现直译台功能。 对于 HDMI2.1 输入&#xff0c;LT691…

CCF-CSP真题《202309-1 坐标变换(其一)》思路+python,c++,java满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202309-1试题名称&#xff1a;坐标变换&#xff08;其一&#xff09;时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题描述 对于平面直角坐标…

Ctfshow web入门 XSS篇 web316-web333 详细题解 全

CTFshow XSS web316 是反射型 XSS 法一&#xff1a; 利用现成平台 法二&#xff1a; 自己搭服务器 先在服务器上面放一个接受Cookie的文件。 文件内容&#xff1a; <?php$cookie $_GET[cookie];$time date(Y-m-d h:i:s, time());$log fopen("cookie.txt"…

Python计算机二级中常考函数

1.fi.read()→返回的是一个包含整个文件内容的字符串。 2.txt.split("。")→对字符串txt进行以 "。"作为分隔符的分割操作&#xff0c;并得到一个列表。 3.fo.write()函数→向文件写入数据的方法。 4." 。\n".join(ls)→将一个包含多个字符串…

数字人直播系统开发哪家好?

随着互联网技术的不断发展&#xff0c;直播行业已经成为了一个炙手可热的领域。数字人直播系统作为直播行业的一种新型应用&#xff0c;通过虚拟形象与真人克隆的结合&#xff0c;为用户提供了一种全新的互动体验。那么&#xff0c;在众多开发公司中&#xff0c;哪家公司的数字…

7、SpringBoot_高级配置

一、配置高级 1.临时属性设置 1.1引出问题 如果目标电脑上8080端口已经使用&#xff0c;再次使用该端口会出现端口占用问题 解决方式 重新更换配置文件修改端口打包通过临时属性配置新端口更换配置文件 1.2添加临时属性配置 通过临时属性修改8080端口 java -jar 项目.jar…

为啥美国服务器和空间有那么多高防产品?

​  伴随着企业业务的扩展&#xff0c;很多已经走出了国门&#xff0c;开始对海外服务器有了不同的选择。另外&#xff0c;基于一些行业的特殊性&#xff0c;受网络攻击多且需要保证数据安全性&#xff0c;就有一部分人是对高防服务器租用十分的感兴趣。留心的小伙伴可以注意…

计算机毕设 基于时间序列的股票预测于分析

文章目录 1 简介2 时间序列的由来2.1 四种模型的名称&#xff1a; 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 简介 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今…

面试网络安全研究员准备工作

这几天一直有兄弟问我&#xff0c;想去面试一家网安公司网络安全研究员&#xff0c;需要做哪些准备工作&#xff0c;这几天闲下来总结了一下。每个企业对这个岗位的具体需求都不一样&#xff0c;但是常见的岗位职责一般有这么几点&#xff1a; 1.前瞻性网络安全技术研究&#…

2014 款金旅牌小型客车 发动机怠速抖动、加速无力

故障现象 一辆2014款金旅牌小型客车&#xff0c;搭载JM491Q-ME发动机&#xff0c;累计行驶里程约为20万km。车主反映&#xff0c;最近该车发动机怠速抖动、加速无力&#xff0c;且经常缺少冷却液。 故障诊断 根据车主描述的故障现象&#xff0c;初步判断该车气缸垫损坏&#…

代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II

本文思路和详细解答来源于: 代码随想录 视频讲解见: 双指针法经典题目 | LeetCode&#xff1a;977.有序数组的平方_哔哩哔哩_bilibili Leetcode T977 有序数组的平方 题目链接: 977. 有序数组的平方 - 力扣&#xff08;LeetCode&#xff09; 思路1: 暴力求解 这里先解释一下非…

与创新者同行!Doris Summit Asia 2023 完整议程公开,首届线下峰会邀你报名!

距离 Doris Summit 2022 闭幕已近一年&#xff0c;Doris Summit Asia 2023 已经起航。 这一年里&#xff0c; Apache Doris 完成了从 1.0 到 2.0 具有里程碑意义的版本跨越。通过持续技术创新&#xff0c;实现了令人瞩目的性能飞跃。不仅如此&#xff0c;Apache Doris 不断拓展…

Unity之VR如何实现跟随视角的UI

前言 我们在制作VR项目的时候,大部分时候,是把UI固定到一个位置,比如桌子或者空中,这么做固然稳定,但是当我们有以下需求的时候,固定位置的UI可能会不适用: 1.场景较小,操作物体占用了很大体积,没有固定的可以清晰显示完整UI的位置。 2.需要频繁的前后左右,更换姿势…

数据结构:二叉树的基本概念

文章目录 1. 二叉树的定义2. 二叉树的特点3. 特殊二叉树斜树满二叉树完全二叉树 4. 二叉树的性质 1. 二叉树的定义 如果我们猜一个100以内的数字,该怎么猜才能理论最快呢? 第一种方式:从1,2一直猜到100, 反正数字都是100以内,总能猜到的 第二种方式:先猜50,如果比结果小,猜75…