0. Arthas的基本安装和使用

news2024/9/24 16:56:59

我们慢慢寻找,直到找到我们的方向。 选择了方向,便一往无前。 我们爱那少年,一如爱我们自己。

Arthas 的简介

Arthas 的官方文档: https://arthas.aliyun.com/doc/
Arthas的官方命令文档: https://arthas.aliyun.com/doc/advanced-use.html

可以查看相应的文档: https://arthas.aliyun.com/doc/命令.html
如: https://arthas.aliyun.com/doc/grep.html
https://arthas.aliyun.com/doc/cat.html

百度云地址:

链接:https://pan.baidu.com/s/1VDLseZEIs-PQXbQ5XPjLKg
提取码:yyds

主要的使用方法:

  1. 查看某个类 或者方法的源代码 jad

  2. 重新替换某个类 redefine retransform

  3. 内存中编译某个 .java 文件 mc

  4. 查看某个方法的运行时长 trace

  5. 查看某个方法的参数和返回值 watch

  6. 查看方法执行的信息 monitor

  7. 导出源文件

jad --source-only demo.MathGame > /tmp/MathGame.java

  1. 修改源文件 通过 vim 命令 修改 /tmp/MathGame.java 的源代码信息

  2. 查询 编译该文件使用的 classLoader sc -d demo.MathGame |grep classLoaderHash

  3. 进行编译 mc -c 2332ff /tmp/MathGame.java -d /tmp

  4. 加载替换 .class 文件 retransform /tmp/demo/MathGame.class

一. 可以做什么?

Arthas 是 Alibaba的开源 Java 诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

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

Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

二. 安装和卸载

安装

有网在线安装

curl -O https://arthas.aliyun.com/arthas-boot.jar

会在当前的目录下 下载 arthas-boot.jar
执行命令:

java -jar arthas-boot.jar

会将 arthas相关的jar包全部下载。
如果下载太慢,可以使用 aliyun的镜像:

java -jar arthas-boot.jar --repo-mirror aliyun --use-http

放置在当前目录下的 .arthas 隐藏目录下

mv .arthas arthas

将隐藏目录变成 展示目录

下载后的目录结构为:

内网离线安装

可以访问链接: https://arthas.aliyun.com/download/latest_version?mirror=aliyun 进行下载
下载后,是一个 .zip 文件


将其解压,可以在 windows 上使用。
也可以将解压后的文件进行压缩,

tar -czf arthas3.6.1.tar.gz arthas-packaging-3.6.1-bin

变成 arthas3.6.1.tar.gz 文件
将 arthas3.6.1.tar.gz 文件上传到内网服务器上后将其解压

tar -xvf arthas3.6.1.tar.gz

便可以正常使用.

在 root/logs/arthas 下保存着相应的日志记录

卸载

直接删除 arthas 文件夹 和 logs 文件夹下的arthas相关内容 即可

rm -rf arthas/
    
rm -rf /root/logs/arthas 
rm -rf /root/logs/ arthas-cache

入门使用

简单使用

arthas 目录下有一个 math-game.jar 包

math-game是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。
源代码:

package demo;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;

public class MathGame {
    private static Random random = new Random();

    private int illegalArgumentCount = 0;

    public static void main(String[] args) throws InterruptedException {
        MathGame game = new MathGame();
        while (true) {
            game.run();
            TimeUnit.SECONDS.sleep(1);
        }
    }

    public void run() throws InterruptedException {
        try {
            int number = random.nextInt()/10000;
            List<Integer> primeFactors = primeFactors(number);
            print(number, primeFactors);

        } catch (Exception e) {
            System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage());
        }
    }

    public static void print(int number, List<Integer> primeFactors) {
        StringBuffer sb = new StringBuffer(number + "=");
        for (int factor : primeFactors) {
            sb.append(factor).append('*');
        }
        if (sb.charAt(sb.length() - 1) == '*') {
            sb.deleteCharAt(sb.length() - 1);
        }
        System.out.println(sb);
    }

    public List<Integer> primeFactors(int number) {
        if (number < 2) {
            illegalArgumentCount++;
            throw new IllegalArgumentException("number is: " + number + ", need >= 2");
        }

        List<Integer> result = new ArrayList<Integer>();
        int i = 2;
        while (i <= number) {
            if (number % i == 0) {
                result.add(i);
                number = number / i;
                i = 2;
            } else {
                i++;
            }
        }

        return result;
    }
}

启动这个 jar 包:

java -jar math-game.jar

再启动 arthas-boot.jar 包

java -jar arthas-boot.jar

输入序号 选择你要监听的程序

输入 1 然后点击回车


出现这个,说明已经进行监听这个程序了
输入 指令:

thread

便可以查看详细的线程信息。
关于 arthas 的 指令,会放置在下一个章节中讲解。

其它情况

未启动程序

如果没有启动 math-game.jar , 当前服务器也没有任何一个 java 程序

[root@localhost arthas3.6.1]# java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.6.1
[INFO] Can not find java process. Try to run `jps` command lists the instrumented Java HotSpot VMs on the target system.
Please select an available pid.
[root@localhost arthas3.6.1]#

是通过 jps 进行监听的

如果报错误:

Arthas - [INFO] Can not find java process. Try to pass <pid> in command line

如果使用的是 openjdk,会出现这个异常 (会发现没有 jps 这个命令)。 需要使用 oracle jdk

多次启动程序

现在已经启动了 arthas-boot.jar ,再另外一个窗口再次启动:

如果你的同事已经启动了 arthas-boot.jar, 你再次启动 arhtas-boot.jar时,可能会报端口冲突的问题。

[ERROR] Target process 24255 is not the process using port 3658, you will connect to an unexpected process.
[ERROR] 1. Try to restart arthas-boot, select process 30482, shutdown it first.
[ERROR] 2. Or try to use different telnet port, for example: java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

可以使用:

java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

表示以 9988 这个新端口启用这个程序。

当前环境存在多个项目

输入序号,再点击回车。 如 输入 4,再回车,就会监听 4项目。 输入 2,点击回车,就会监听 2项目。

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

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

相关文章

数据结构-难点代码突破(C++实现图广度优先遍历,深度优先遍历,广度/深度优先遍历生成树和森林,广度优先遍历求单源非带权图两点最短路径)

注意&#xff1a;为了简便起见&#xff0c;这里采用邻接矩阵的方式储存图的边信息 文章目录1.邻接矩阵图的广度优先遍历单源非带权图的两点最短路径2. 邻接矩阵图的深度优先遍历3. 广度/深度优先遍历生成树和森林深度优先生成树与森林广度优先遍历生成树与森林图的遍历是指从图…

Compose回忆童年 - 手拉灯绳-开灯/关灯

一、前言 偶然间想到小时候顺着那白色开关垂下来的灯绳&#xff0c;拉一下“咔哒”一声&#xff0c;再拉一下又是“咔哒”一声。当时年龄小感觉新奇总是把灯开了关又关了开的拉着玩&#xff0c;以至于好几次拉坏了开关灯绳。 今天我们在手机上做一个拉不坏的灯绳&#x1f604…

毕业四年,我当初是如何走上编程这条路的!

感概万千&#xff0c;毕业已达4年之久。 想起在大学时期学习编程的事情&#xff0c;感觉很有意义&#xff0c;在此记录回顾一下。 希望自己初心未变&#xff0c;勇往向前 现状与过去 20210706 目前的我是在天津一家公司做前端开发&#xff0c;主要用Python。 从毕业实习到…

入门:容器工作机制概述

我们先来看看Docker的整体架构&#xff1a; 实际上分为三个部分&#xff1a; Docker 客户端&#xff1a;也就是我们之前使用的docker命令&#xff0c;都是在客户端上执行的&#xff0c;操作会发送到服务端上处理。 Docker 服务端&#xff1a;服务端就是启动容器的主体了&#x…

Java项目:SSM网上超市购物商城管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;分为普通用户、管理员两种角色。前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 管理员角色包含以下功…

毕业设计 单片机温湿度环境检测仪 - stm32 物联网 嵌入式

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码6 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长…

Dynamic RSA System 设计与实现

一、背景 在实现了静态的加解密工具后&#xff0c;感觉不够灵活&#xff0c;想设计一个动态生成 RSA KeyPair 的中间系统&#xff0c;暂且称为 Dynamic RSA System&#xff0c;以达到自动化维护信安高墙的效果。 加解密和签名校验工具_余衫马的博客-CSDN博客_校验和工具RSA加…

Zero-sho原先的升级版:hourglass网络:U-Net

ZMFF: Zero-shot multi-focus image fusion &#xff08;ZMFF: Zero-shot 多聚焦图像融合&#xff09; &#xff08;本论文的先导片&#xff1a;ZERO-SHOT MULTI-FOCUS IMAGE FUSION&#xff09; 这是我们之前的扩展工作。在ZMFF,我们做一些改动和改进相比原来的框架。首先&…

数学英语不好,新手学编程难吗?适合学Python吗?

英语不好&#xff0c;上学时考试从来没有超越40分。 数学也不可&#xff0c;很多的东西都还给老师了。 我还能学习编程吗&#xff1f;&#xff1f;&#xff1f; 刚开始学习的时分&#xff0c;这个问题深深的困扰着我。以致于我其时报培训班之前犹疑了很长很长时刻。 由于在我…

[C语言数据结构]万字长文带你学习八大排序

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;数据结构 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客讲解八大排序&#xff0c;及其优化 文章目录排序Ⅰ插入排序&…

配置SSH Keys到github,实现本地操作远程仓库的权限

文章目录第1步&#xff1a;创建SSH Key第2步&#xff1a;检查是否纯正.ssh目录第3步&#xff1a;复制id_rsa.pub的内容第4步&#xff1a;在你的github页面上配置SSH key第5步&#xff1a;验证是否可连接第1步&#xff1a;创建SSH Key 在用户根目录下&#xff0c;打开命令&…

非零基础自学Golang 第10章 错误处理 10.5 Go语言错误的应用 10.6 小结 10.7 知识拓展

非零基础自学Golang 文章目录非零基础自学Golang第10章 错误处理10.5 Go语言错误的应用10.6 小结10.7 知识拓展10.7.1 error接口的应用第10章 错误处理 10.5 Go语言错误的应用 10.4.2小节中的panic()和recover()虽然能模拟其他语言的异常机制&#xff0c;但是并不建议在Go语言…

广州特耐苏-广州风淋通道构造及特点

风淋通道构造及风淋通道特点-广州特耐苏-广州风淋通道-广州风淋通道规格-广州风淋通道置量-广州风淋通道价格-特耐苏拥有*的数控加工设备&#xff0c;技术力量雄厚&#xff0c;专业生产自动化/风淋室货淋室、 >>采用更适合洁净室原理的圆弧转角; >>系统自动控制运…

密码技术扫盲:非对称加密

个人博客 密码技术扫盲&#xff1a;对称加密&#x1f3af; 密码技术扫盲&#xff1a;非对称加密密码技术扫盲&#xff1a;认证 在上一篇对称加密的介绍中&#xff0c;我们了解到对明文的加密需要使用到密钥&#xff0c;而解密时也必须用到同一把密钥&#xff0c;也就是说发送…

假如编程是魔法之零基础看得懂的Python入门教程

一、前言 几个月前编写了一份python语言入门的博文&#xff0c;近期重新审阅了一遍发现编写的质量太过随意&#xff0c;可能对于一部分人并不是非常友好&#xff0c;故此重新编写Python语言的零基础教程。 本篇教程将会尽量把一些专业术语给读者讲解清楚&#xff0c;并且让读者…

如何成为一个优秀的Python工程师?

众所周知&#xff0c;Python因其优雅而简洁的语言优势而备受程序员的青睐和追捧。随着人工智能、大数据技术的落地&#xff0c;Python工程师也成为了目前薪资待遇高&#xff0c;发展前景好的热门岗位。虽然&#xff0c;Python入门简单&#xff0c;对初学者友好&#xff0c;但是…

52 如何 尽可能的减少 自定义ClassLoader 造成的影响

前言 // 呵呵 很快又该总结 2022 了, 希望这一年也能总结出很多收获 接着 java.lang.Class/java.lang.ClassLoader/InstanceKlass/ClassloaderData 的卸载 可以先看一下 这一篇文章, 明确一下 上下文 这里 主要说的是 如果我们的场景中存在自定义的 classloader 的情况…

Flask + echarts 轻松解决 nginx 日志可视化

最近&#xff0c;线上的业务系统不太稳定&#xff0c;需要分析下访问情况&#xff0c;能拿到的数据只有 nginx 服务器的访问日志&#xff0c;不过难不倒我&#xff0c;用合适的工具&#xff0c;分分钟做出图形化展示&#xff0c;看看怎么做的吧 思路 nginx 访问日志&#xff…

9 CPP结构体注意事项

注意&#xff1a; 1 结构名是标识符 2 结构体的成员可以是任意数据类型 3 定义结构体描述的代码可以放在程序的人和地方&#xff0c;一般放在main函数的上面或头文件中。 4 结构体成员可以用C的类&#xff08;如string&#xff09;&#xff0c;但是不提倡。 5 在C中&#…

java:AES加密和解密

java&#xff1a;AES加密和解密 1 前言 对称加密&#xff0c;即单秘钥加密&#xff0c;指加密和解密的过程中&#xff0c;使用相同的秘钥&#xff0c;相比于非对称加密&#xff0c;因仅有一把钥匙&#xff0c;故而速度更快&#xff0c;更适合解密大文件&#xff08;常见于如视…