Arthas教程 - 命令篇 (二)

news2024/11/20 15:38:52

目录

一、Attach 黏附一个进程

1.1 准备代码

1.2  启动Demo

1.3 启动arthas

1.4 通过浏览器连接arthas

二、常用命令

2.1 dashboard 仪表盘

2.2 cls 清屏

2.3 thread 线程

2.4 jad 反编译类

2.5 watch 监视

2.6 退出arthas

三、基础命令

3.1 help

3.2 cat

3.3 grep

3.4 pwd

3.5 session

3.6 reset

3.7 version

3.8 quit

3.9 stop

四、JVM相关命令详解

4.1 dashboard


一、Attach 黏附一个进程

前面安装的时候其实已经演示过了。这里再来一遍。

1.1 准备代码

以下是一个简单的Java程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。代码的内容不用理会这不是现在关注的点。

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();
        
    //用于统计生成的不合法变量的个数
    public int illegalArgumentCount = 0;
​
    public static void main(String[] args) throws InterruptedException {
        MathGame game = new MathGame();
        //死循环,每过1秒调用1次下面的方法(不是开启一个线程)
        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);
    }
​
    //计算number的质因数分解
    public List<Integer> primeFactors(int number) {
        //如果小于2,则抛出异常,并且计数加1
        if (number < 2) {
            illegalArgumentCount++;
            throw new IllegalArgumentException("number is: " + number + ", need >= 2");
        }
             //用于保存每个质数
        List<Integer> result = new ArrayList<Integer>();
        //分解过程,从2开始看能不能整除
        int i = 2;
        while (i <= number) {  //如果i大于number就退出循环
            //能整除,则i为一个因数,number为整除的结果再继续从2开始除
            if (number % i == 0) {
                result.add(i);
                number = number / i;
                i = 2;
            } else {
                i++;  //否则i++
            }
        }
​
        return result;
    }
}

1.2  启动Demo

我们将上面的代码打成jar包。然后通过java -jar的方式运行它。

因为它是一个死循环,所以不用担心会停止。

当然了,其实它就是arthas-demo.jar这个jar包。我们可以直接用,不用打包。

真实情况下,肯定是用自己的项目嘛。

java -jar arthas-demo.jar

效果

1.3 启动arthas

  1. 因为arthas-demo.jar进程打开了一个窗口,所以另开一个命令窗口执行arthas-boot.jar

  2. 选择要粘附的进程:arthas-demo.jar

如果粘附成功,在arthas-demo.jar那个窗口中会出现日志记录的信息,记录在/root/logs/目录下

如果端口号被占用,也可以通过以下命令换成另一个端口号执行

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

1.4 通过浏览器连接arthas

Arthas目前支持Web Console,用户在attach成功之后,可以直接访问:http://127.0.0.1:3658/。

可以填入IP,远程连接其它机器上的arthas。

默认情况下,arthas只listen 127.0.0.1,所以如果想从远程连接,则可以使用 --target-ip参数指定listen的IP。

小结

  1. 启动被诊断进程

  2. 启动arthas-boot.jar,粘贴上面的进程

  3. 不但可以通过命令行的方式来操作arthas也可以通过浏览器来访问arthas

二、常用命令

2.1 dashboard 仪表盘

输入dashboard(仪表盘),按回车/enter,会展示当前进程的信息,它隔一段时间自动刷新。按ctrl+c可以中断执行

注:输入前面部分字母,按tab可以自动补全命令

  1. 第一部分是显示JVM中运行的所有线程:所在线程组,优先级,线程的状态CPU的占用率是否是后台进程等

  2. 第二部分显示的JVM内存使用情况

  3. 第三部分是操作系统的一些信息和Java版本号

2.2 cls 清屏

和Linux不一样,Linux是clear清屏,它是cls

2.3 thread 线程

thread 命令会显示所有当前正在运行的线程

thread ID 可以查询具体某一线程的详细信息

2.4 jad 反编译类

可以将class文件反编译成Java源代码。

只需通过命令 jad 类的全类名

2.5 watch 监视

它的作用是监视某个类某个方法的调用情况,包括它的返回值是什么、请求参数是什么等信息。

watch 类的全类名 方法名 returnObj

使用过程中我们可以通过tab命令来提示补全。

2.6 退出arthas

如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。

如果想完全退出arthas,可以执行stop命令。

三、基础命令

3.1 help

作用

查看命令帮助信息

效果

3.2 cat

作用

打印文件内容,和linux里的cat命令类似

如果没有写路径,则显示当前目录下的文件

3.3 grep

作用

匹配查找,和linux里的grep命令类似,但它只能用于管道命令

参数

参数列表作用
-n显示行号
-i忽略大小写查找
-m 行数最大显示行数,要与查询字符串一起使用
-e "正则表达式"使用正则表达式查找

举例

只显示包含java字符串的行系统属性

sysprop | grep java

显示包含java字符串的行和行号的系统属性

sysprop | grep java -n 

显示包含system字符串的10行信息

thread | grep system -m 10 

3.4 pwd

 作用

返回当前的工作目录,和linux命令类似

pwd: Print Work Directory 打印当前工作目录

效果

3.5 session

作用

查看当前会话的信息

效果

3.6 reset

作用

重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类。

简单讲就是,arthas可以增强我们运行的Java程序的某个类。

当然了,如果我们arthas服务器关闭了,这个增加也会被重置,不会改变实际运行的项目(被attach的进程)。

但是arthas服务器没有关闭的情况下,想在操作过程中重置,其实可以使用reset命令,让它停止增强。

语法

还原指定类
reset Test

还原所有以List结尾的类
reset *List

还原所有的类
reset

3.7 version

作用

输出当前目标 Java 进程所加载的 Arthas 版本号

效果

3.8 quit

作用

退出当前 Arthas 客户端,其他 Arthas 客户端不受影响

3.9 stop

作用

关闭 Arthas 服务端,所有 Arthas 客户端全部退出

四、JVM相关命令详解

4.1 dashboard

数据说明

  • ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应

  • NAME: 线程名

  • GROUP: 线程组名

  • PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高

  • STATE: 线程的状态

  • CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。

  • TIME: 线程运行总时间,数据格式为分:秒

  • INTERRUPTED: 线程当前的中断位状态

  • DAEMON: 是否是daemon线程

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

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

相关文章

小米新机代号“Manet”:搭载高通8 Gen 3 处理器 + 金属中框设计

根据数码闲聊站和体验more的消息爆料&#xff0c;小米Redmi K70 Pro被代号为“Manet”&#xff0c;将搭载高通SM8650处理器&#xff0c;这是骁龙8 Gen 3移动平台的一部分。该处理器基于台积电N4P工艺制程打造&#xff0c;具有强大的性能表现。 CPU包含1*3.19GHz X45*2.96GHz A7…

Python Opencv实践 - 矩形轮廓绘制(直边矩形,最小外接矩形)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/stars.png") plt.imshow(img[:,:,::-1])img_gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) #通过cv.threshold转换为二值图 ret,thresh cv.threshold(img_gray,…

Error from server (NotFound): pods “nginx-57d84f57dc-b866m“ not found

原因&#xff1a;机房断电&#xff0c;导致服务重启 [rootmaster1 logs]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-57d84f57dc-57fkf 1/1 Running 0 75s [rootmaster1 logs]# kubectl logs -f nginx-5…

nginx使用详解

文章目录 一、前言二、nginx使用详解2.1、nginx特点2.2 静态文件处理2.3 反向代理2.4 负载均衡2.5 高级用法2.5.1 正则表达式匹配2.5.2 重定向 三、总结 一、前言 本文将详细介绍nginx的各个功能使用&#xff0c;主要包括 二、nginx使用详解 2.1、nginx特点 高性能&#xff…

【JVM】垃圾收集算法

文章目录 分代收集理论标记-清除算法标记-复制算法标记-整理算法 分代收集理论 当前商业虚拟机的垃圾收集器&#xff0c;大多数都遵循了“分代收集”&#xff08;Generational Collection&#xff09;[1]的理论进 行设计&#xff0c;分代收集名为理论&#xff0c;实质是一套符…

C#循环定时上传数据,失败重传解决方案,数据库标识

有些时候我们需要定时的上传一些数据库的数据&#xff0c;在数据不完整的情况下可能上传失败&#xff0c;上传失败后我们需要定时在重新上传失败的数据&#xff0c;该怎么合理的制定解决方案呢&#xff1f;下面一起看一下&#xff1a; 当然本篇文章只是提供一个思路&#xff0…

windows系统bat脚本调用powershell脚本

前言 项目上有些项目既使用了bat脚本&#xff0c;又使用了powershell脚本&#xff1b; 需要两种脚本配合使用&#xff1b; bat调用powershell 不隐藏窗口运行 bat脚本代码&#xff1a;执行当前路径下的1.ps1脚本文件 start powershell .\1.ps1pause powershell脚本代码&…

025: vue父子组件中传递方法控制:$emit,$refs,$parent,$children

第025个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

prometheus通过blackbox-exporter监控web站点证书

1 概述 线上站点普遍是https&#xff0c;因此监控https web站点的证书的过期时间&#xff0c;是一个基础性需求。例如&#xff0c;证书过期会导致tls握手失败&#xff0c;进而导致用户无法正常访问web站点。 blackbox-expoter是一个web服务&#xff0c;它暴露了一个接口&#…

如何在面试中处理竞争与压力

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

WebSocket与SSE区别

一&#xff0c;websocket WebSocket是HTML5下一种新的协议&#xff08;websocket协议本质上是一个基于tcp的协议&#xff09; 它实现了浏览器与服务器全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通讯的目的 Websocket是一个持久化的协议 websocket的原理 …

算法笔记:二叉树

1 基本二叉树 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常称为“左子节点”和“右子节点”。 二叉树的根是唯一没有父节点的节点&#xff0c;而所有其他节点都有一个父节点和零个或两个子节点。 1.1 基础术语 节点&#xff08;Node&…

服务运营 | MSOR文章精选:远程医疗服务中的统计与运筹(二)

作者信息&#xff1a;王畅&#xff0c;陈盈鑫 编者按 在上一期中&#xff0c;我们分享了与远程医疗中运营管理问题相关的两篇文章。其一发表在《Stochastic Systems》&#xff0c;旨在使用排队论与流体近似的方法解决远程医疗中资源配置的问题&#xff1b;其二发表在《Managem…

R_I相关指令函数(SMART PLC梯形图代码)

大部分小型PLC可能并没有R_I(浮点数转单字)指令&#xff0c;这篇博客我们介绍简单实用的一些转换FC,这些FC其实并不复杂&#xff0c;但是可以大大简化我们的代码量&#xff0c;使代码阅读起来更简介明了。SMART PLC的ABS()指令请查看下面文章链接&#xff1a; PLC绝对值指令AB…

04 Linux补充|C/C++

目录 Linux补充 C语⾔ C语言中puts和printf的区别&#xff1f; Linux补充 (1)ubuntu安装ssh服务端openssh-server命令&#xff1a; ubuntu安装后默认只有ssh客户端&#xff0c;只能去连其它ssh服务器&#xff1b;其它客户端想要连接这个ubuntu系统&#xff0c;需要安装部署…

LLM大模型推理加速 vLLM

参考&#xff1a; https://github.com/vllm-project/vllm https://zhuanlan.zhihu.com/p/645732302 https://vllm.readthedocs.io/en/latest/getting_started/quickstart.html ##文档 加速原理&#xff1a; PagedAttention&#xff0c;主要是利用kv缓存 使用&#xff1a; #…

JVM | Java执行引擎结构及工作原理

引言 Java虚拟机&#xff08;JVM&#xff09;和其复杂性 在我们先前探讨的文章中&#xff0c;我们已经深入到了Java虚拟机&#xff08;JVM&#xff09;的内部&#xff0c;透视了其如何通过元空间存储类的元数据和字节码。JVM的设计初衷是为了实现跨平台兼容性&#xff0c;但随…

JavaScript构造函数

1、构造函数&#xff1a; 是一个函数&#xff0c;是通过new运算符进行调用&#xff0c;生成一个特殊的对象并返回。 function 函数名([参数]){ this.属性名 ‘属性值’ ... this.属性名 function([参数]){ 函数体语句 } } 通常情况下&#xff0c;建议构造函数的首字母大写 …

如何修复损坏的MP4视频文件?

随着智能设备拍摄功能的不断强大&#xff0c;随拍摄成本逐渐降低&#xff0c;越来越多的人喜欢用视频记录我们的生活&#xff0c;并上传抖音、快手、B站等视频网站 但在拍摄视频时也可能遇到一些突发情况&#xff0c;如手机没电断电终止拍摄、视频文件传输中断等&#xff0c;拍…

【Semidrive】解决 X9HP reboot 导致 Android 崩溃的问题

本篇文章介绍如何解决 X9HP 平台的 AP1 域中插着 u 盘时运行 reboot 导致 Android 系统崩溃的问题&#xff0c;软件版本是 X9 PTG4.0&#xff0c;硬件环境是 X9H 开发板 X9H_REF_A04。一、问题原因 在调试过程中遇到插着 u 盘时用 adb shell reboot 命令或直接在串口中 reboot …