首页 > 系统相关 >内存分析工具 Arthas

内存分析工具 Arthas

时间:2024-07-15 10:22:28浏览次数:13  
标签:int add 内存 JVM Arthas 工具 visualVM com BTraceTest

一、Arthas简介

        Arthas(阿尔萨斯)是Alibaba开源的Java诊断工具。支持Linux/Mac/Windows

        1、下载地址: https://github.com/alibaba/arthas/releases

        

阿尔萨斯实时监控线程cpu占用 阿尔萨斯 监控_阿尔萨斯实时监控线程cpu占用

        2、arthas-bin解压之后的目录结构

阿尔萨斯实时监控线程cpu占用 阿尔萨斯 监控_jvm_02

二、启动Arthas监测应用程序

        1、用as.sh启动

        ./as.sh

        2、用arthas-boot启动

        java -jar arthas-boot.jar

        3、选择要监控的进程pid,启动成功之后进入arthas命令行交互模式

阿尔萨斯实时监控线程cpu占用 阿尔萨斯 监控_jvm_03

三、Arthas常用命令

        1、被监控的测试类

package com.yu.visualVM;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class BTraceTest {
	
	private static String yuTest="wj";
    private int c=10;
	
	public int add(int a, int b) {
		return a + b;
	}

	public static void main(String[] args) throws Exception {
		BTraceTest traceTest = new BTraceTest();
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		for (int i = 0; i < 10; i++) {
			reader.readLine();
			int a = (int) Math.round(Math.random() * 1000);
			int b = (int) Math.round(Math.random() * 1000);
			System.out.println(traceTest.add(a, b));
		}
	}
}

 

 

        2、jad:反编译

反编译整个类

jad com.yu.visualVM.BTraceTest

 

反编译类中的方法

jad com.yu.visualVM.BTraceTest add

阿尔萨斯实时监控线程cpu占用 阿尔萨斯 监控_阿尔萨斯实时监控线程cpu占用_04

        3、watch:观察指定方法的调用情况。能观察的范围为:返回值抛出异常入参

观察方法入参、this对象和返回值(观察表达式,默认值是{params, target, returnObj}

watch com.yu.visualVM.BTraceTest  add

-x 2

 观察方法入参

watch com.yu.visualVM.BTraceTest add

"{params,returnObj}" -x 2 -b

观察方法调用前和方法返回后

watch com.yu.visualVM.BTraceTest  add

"{params,target,returnObj}" -x 2 -b -s -n 2

观察入参第一个参数且参数值>101

watch com.yu.visualVM.BTraceTest  add

"{params[0],target}""params[0]>101"

观察当前对象中的属性

watch com.yu.visualVM.BTraceTest  add

"target.yuTest"

观察方法入参:watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b

阿尔萨斯实时监控线程cpu占用 阿尔萨斯 监控_visualvm_05

 观察入参第一个参数且参数值>101:

阿尔萨斯实时监控线程cpu占用 阿尔萨斯 监控_visualvm_06

四、Arthas使用场景

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从JVM内查找某个类的实例?

五、Arthas运行原理

        1、 实现java.lang.instrument

        这个类提供检测Java编程语言代码所需的服务。插装是在方法中添加字节码,以收集工具所使用的数据。由于这些更改纯粹是附加的,所以这些工具不会修改应用程序的状态或行为。此类良性工具的示例包括监视代理、分析程序、覆盖率分析程序和事件日志记录程序。

有两种方法可以获得Instrumentation接口的实例:

        当JVM以指示代理类的方式启动时。在这种情况下,将Instrumentation实例传递给代理类的main方法。

        当JVM提供了在JVM启动后某个时间启动代理的机制时。在这种情况下,将Instrumentation实例传递给代理代码的agentmain方法。

        2、实现ASM

        ASM是一个Java字节码操作框架,用来动态生成class或者增强class,cglib的底层就是它,arthas也是通过它实现对class的增强的。

        3、实现接口JVMTI

What is the JVM Tool Interface?

       JVM TI 是开发和监控工具使用的编程接口。它提供了一种检查状态和控制运行在JavaTM虚拟机(VM)中的应用程序执行的方法。

        JVM TI 旨在为所有需要访问VM状态的工具提供VM接口,包括但不限于:概要分析、调试、监视、线程分析和覆盖率分析工具。

        JVM TI 是一个双向接口。JVM TI的客户机(以下称为代理)可以通过事件通知有趣的事件。JVM TI可以通过许多函数查询和控制应用程序,这些函数可以响应事件,也可以独立于事件。

代理程序与执行所检查应用程序的虚拟机在同一进程中运行,并直接与之通信。这种通信是通过本机接口(JVM TI)进行的。本机进程内接口允许最大限度的控制,对工具的入侵最小。通常,代理是相对紧凑的。它们可以由一个独立的进程控制,该进程实现了工具的大部分功能,而不会干扰目标应用程序的正常执行。

 

    本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

标签:int,add,内存,JVM,Arthas,工具,visualVM,com,BTraceTest
From: https://www.cnblogs.com/jiaodaoniujava/p/18302581

相关文章

  • 分享:局域网传输工具 多平台支持
    介绍将文件分享到附近的设备。免费、开源、跨平台。官网https://localsend.org/zh-CN/download备用下载PC端:LocalSend-1.15.0-windows-x86-64.zip备用一下载:https://damon8.lanzoub.com/iWgsx24haape密码:2hyw备用二点击下载安卓端:LocalSend-1.15.0.apk备用一下......
  • DirectX 修复工具对电脑有损害吗
    在解决电脑中与DirectX相关的问题时,DirectX修复工具常常成为我们的得力助手。然而,很多用户可能会产生这样的疑问:使用这类工具会不会对电脑造成损害呢?首先,需要明确的是,大多数正规且知名的DirectX修复工具本身并不会对电脑造成直接的损害。这些工具通常是经过严格的开发和......
  • DirectX 修复工具修复失败怎么办
    在处理DirectX相关问题时,我们常常会借助DX修复工具来解决。然而,有时可能会遇到修复失败的情况,这无疑会让人感到困扰。但别担心,下面为您提供一些应对这种情况的方法和建议。首先,需要仔细检查修复工具的报错信息。报错信息往往会提供一些关键线索,指明问题所在。比如,可能会......
  • PopClip(Mac 划词增强工具)值得购买吗?
    PopClip是一款Mac划词操作增强工具,可选装翻译搜索、格式转换等丰富扩展,联动多种软件执行创建提醒事项、添加到笔记等快捷操作,有效提升工作效率。在iPhone或iPad内,选词后就会弹出气泡菜单,让你选择执行各种操作,非常便捷。PopClip能让你在Mac上,得到类似的高效划词......
  • 使用Visual Studio诊断工具检查内存泄漏——订阅Events
    参考文章8WaysYoucanCauseMemoryLeaksin.NET订阅事件导致内存泄漏的原因订阅事件后,该对象将保留对你的类的引用。除非你使用不捕获类成员的匿名方法。防止Event内存泄漏的方法注销订阅事件。使用弱句柄(weak-handler)模式。如果可能,请使用匿名函数进行订阅,并且不......
  • 在deepin linux系统中安装sqlynx数据库管理工具
    一、官网下载:https://www.sqlynx.com/#/home/probation/SQLynx二、解压后在终端输入命令1.进入目录输入命令./maicong-sqlynx.sh2.修改权限chmod+xjdk1.8.0_351//bin/java3.安装./maicong-sqlynx.sh4.启动sudoshmaicong-sqlynx.shstart5.查询端口号taillog/......
  • 网安工具系列:Httpx高级使用
    Httpx高级使用Httpx高级使用httpx使用安装Usage基本探测匹配MATCHERS:过滤FILTERS:速率输出配置其他实战应用基本探测指定端口探测c段存活探测Grafana任意文件读取快速扫描FUZZ子域名subfinder枚举域名并使用httpx存活探测......
  • C++11时间工具<chrono>梳理
    目录<chrono>时间间隔duration常用的duration时间点time_point时钟system_clock&steady_clocksystem_clock代码举例steady_clock例程:转换函数1.duration_castDescription:duration支持隐式转换的规则2.time_point_cast<chrono>C++11中提供了日期和时间相关的库chrono。chro......
  • 1、多线程同步——CPU、core核、线程、内存
    CPU的运行原理控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后CPU把数据读到CPU的内部存储单元(就......
  • 模型部署 - TensorRT - NVIDIA 讲 TensorRT - 8.6.1版本 - 5种工具
                                          ......