arthas源码刨析:启动 (1)

news2024/11/27 17:43:45

文章目录

  • arthas-boot
    • Bootstrap

在这里插入图片描述

Created with Raphaël 2.3.0 开始 检查监听端口 jps 列表java应用 下载 lib 依赖 功能移交给 arthas-core 结束

arthas-boot

该module 的代码只有3个类:
在这里插入图片描述

Bootstrap

启动类 Bootstrap ,开头的注解就是 alibaba 的 cli 中间件,和 picocli 蛮像。
在这里插入图片描述
arthas 在一些命令的执行需要有 JDK 命令的支持,以 ProcessUtils.select 为例,该方法实际上是要调用JAVA_HOME 下的 jps

jps -l

		long pid = bootstrap.getPid();
        // select pid
        if (pid < 0) {
            try {
                pid = ProcessUtils.select(bootstrap.isVerbose(), telnetPortPid, bootstrap.getSelect());
            } catch (InputMismatchException e) {
                System.out.println("Please input an integer to select pid.");
                System.exit(1);
            }
            if (pid < 0) {
                System.out.println("Please select an available pid.");
                System.exit(1);
            }
        }

选择 pid 后下载相关依赖:
在这里插入图片描述
在这里插入图片描述
后面就是启动关键模块 arthas-core
在这里插入图片描述
也就是说又启动了一个java进程:
在这里插入图片描述
这就理解了 arthas 提升要用 stop 命令来推出,而不是关闭当前命名窗口,它是个多进程应用。
在这里插入图片描述

之后构建 ProcessBuilder 执行命令:

        // "${JAVA_HOME}"/bin/java \
        // ${opts} \
        // -jar "${arthas_lib_dir}/arthas-core.jar" \
        // -pid ${TARGET_PID} \
        // -target-ip ${TARGET_IP} \
        // -telnet-port ${TELNET_PORT} \
        // -http-port ${HTTP_PORT} \
        // -core "${arthas_lib_dir}/arthas-core.jar" \
        // -agent "${arthas_lib_dir}/arthas-agent.jar"

并将进程的标准输出、标准错误进行重定向:

ProcessBuilder pb = new ProcessBuilder(command);
        // https://github.com/alibaba/arthas/issues/2166
        pb.environment().put("JAVA_TOOL_OPTIONS", "");
        try {
            final Process proc = pb.start();
            Thread redirectStdout = new Thread(new Runnable() {
                @Override
                public void run() {
                    InputStream inputStream = proc.getInputStream();
                    try {
                        IOUtils.copy(inputStream, System.out);
                    } catch (IOException e) {
                        IOUtils.close(inputStream);
                    }

                }
            });

            Thread redirectStderr = new Thread(new Runnable() {
                @Override
                public void run() {
                    InputStream inputStream = proc.getErrorStream();
                    try {
                        IOUtils.copy(inputStream, System.err);
                    } catch (IOException e) {
                        IOUtils.close(inputStream);
                    }

                }
            });
            redirectStdout.start();
            redirectStderr.start();
            redirectStdout.join();
            redirectStderr.join();

            int exitValue = proc.exitValue();
            if (exitValue != 0) {
                AnsiLog.error("attach fail, targetPid: " + targetPid);
                System.exit(1);
            }

最终看到这个:
在这里插入图片描述

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

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

相关文章

蛇优化算法(Snake Optimization, SO)优化RBF神经网络的扩散速度实现多数入多输出数据预测,可以更改数据集(MATLAB代码)

一、蛇优化算法优化RBF神经网络的扩散速度原理介绍 RBF神经网络的扩散速度通常与它的径向基函数的宽度参数&#xff08;σ&#xff09;有关&#xff0c;这个参数控制了函数的径向作用范围。在高斯核函数中&#xff0c;当σ值较大时&#xff0c;函数的扩散速度较快&#xff0c;…

Prometheus3: 监控CPU

1. 查看监控CPU所需的key [rootlocalhost node_exporter]# curl http://localhost:9100/metrics | grep -i node_cpu | head% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed0 0 0 0 …

达梦数据库的系统视图v$db_cache

达梦数据库的系统视图v$db_cache 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$DB_CACHE 是一个系统视图&#xff0c;提供了数据库缓存的相关信息。数据库缓存是数据库系统用来加速数据访问的关键组件&#xff0c;通过缓存常用数据来减少对磁盘操作的依赖…

《机器学习》—— 使用过采样方法实现逻辑回归分类问题

文章目录 一、什么是过采样方法&#xff1f;二、使用过采样方法实现逻辑回归分类问题三、过采样的优缺点 本篇内容是 基于Python的scikit-learn库中sklearn.linear_model 类中的 LogisticRegression&#xff08;&#xff09;逻辑回归方法实现的&#xff0c;其内容中只是在处理…

进程与线程(7)

IPC通信方式&#xff1a; 一、共享内存 system v &#xff1a; 共享内存 是一块&#xff0c;内核预留的空间 最高效的通信方式 (避免了用户空间 到 内核空间的数据拷贝) 二、IPC对象操作通用框架&#xff1a; key值 > 申请 》读写 》关闭 》卸载 1.ftok函数&#xff1a;…

【Dash】Dash中@callback() 回调函数的Output() 参数

一、Dash 中的 callback() 在Python中&#xff0c;callback是一个用于注册回调函数的装饰器 Dash 的回调机制允许开发者创建交互式的Web应用&#xff0c;通过回调函数可以实现前端界面与后端逻辑的交互。 二、callback() 的概念、定义和应用场景 概念 callback 是 Dash 框…

视觉表征学习中的世界模型:自监督方法的新篇章

人工智能咨询培训老师叶梓 转载标明出处 计算机视觉中&#xff0c;表征学习是一个核心问题。如何让机器像人类一样理解图像内容&#xff0c;是实现高级视觉任务的关键。传统的自监督学习方法往往依赖于数据的变换来预测其变化&#xff0c;例如遮蔽图像建模&#xff08;Masked …

SpringBoot:将单体项目拆分成微服务项目

&#x1f4a5; 该系列属于【SpringBoot基础】专栏&#xff0c;如您需查看其他SpringBoot相关文章&#xff0c;请您点击左边的连接 目录 一、项目准备 二、拆分商品服务和购物车服务 1. 商品服务 &#xff08;1&#xff09;创建模块 &#xff08;2&#xff09;填写依赖 &a…

数学生物学-1-指数增长与衰退(Exponential Growth and Decay)

我们注意到数学专业的学生往往没有生物学系统的思维&#xff0c;而生物专业的学生则常常对数学感到恐惧。许多生物专业的学生可能一直对科学感兴趣&#xff0c;部分原因是他们认为生物学是一个不需要任何数学技能或背景就可以研究的科学领域。我认为这是不对的思维。 虽然大多…

Fortify相比其他扫描工具的优势在哪里?

最新发布的 Fortify 22.1.0 版本&#xff0c;不仅能高度兼容最新的软件技术&#xff0c;同时继续保持对运营环境常见的应用安全用例的广泛兼容性。经过强化的 Fortify 进一步提升了性能、准确性、可扩展性和易用性。 无论是运行 DevSecOps、开展云计算转型&#xff0c;还是确保…

Mac移动硬盘选什么格式最好 Mac怎么用ntfs移动硬盘

在使用Mac电脑的过程中&#xff0c;很多用户可能有需要扩展存储空间的需求。选择合适的移动硬盘格式对于数据传输的效率和兼容性至关重要。本文将详细介绍Mac移动硬盘选什么格式好&#xff0c;以及Mac怎么用ntfs移动硬盘&#xff0c;帮助用户优化Mac的使用体验。 一、Mac移动硬…

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

仿照ContentLoadingProgressBar 的特点在Android项目中自定义Loading对话框

ContentLoadingProgressBar 是 Android 中的一个控件&#xff0c;继承自 ProgressBar。它在 ProgressBar 的基础上添加了一些特殊功能&#xff0c;主要用于在加载内容时显示进度。它的一些主要特点如下&#xff1a; 自动隐藏和显示&#xff1a;ContentLoadingProgressBar 会在…

引发C++程序内存泄漏的常见原因分析与排查方法总结

目录 1、概述 2、内存泄漏与程序的位数 3、调用哪些接口去动态申请内存&#xff1f; 4、引发内存泄漏的常见原因总结 4.1、通过malloc/new等动态申请的内存&#xff0c;在使用完后&#xff0c;没有调用free/delete去释放&#xff08;也可能是调用了上面讲到的HeapAlloc或V…

计算机专业大四毕业生如何在一天内完成开题报告?一招教你解锁开题报告写作技巧

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

SQL Server数据库 创建表,和表的增删改查

打开SQL Server工具,连接服务器 右击数据库&#xff0c;创建新的数据库 新建表 填写列&#xff0c;我添加了Id,Name,Sex,Age,和class列 右键表刷新一下就有了 我又同时创建了一个Class表 点击新建查询&#xff0c;现在写代码添加数据&#xff0c;也可以操作表来对数据进行添加 …

GEC6818开发板显示BMP格式图片

1、BMP格式图片 bmp格式图片是没有经过任何压缩过的图片,缺点是为文件尺寸比较大,不适合传播;优点是文件必须要解码器可以读出来直接使用。 虽然BMP格式文件内部存储的就是RGB数据,无需任何解码,但毕竟RGB数据是纯数据,没有任何图片尺寸、色深等具体信息,因此我们需要了…

滴滴二季度GTV达963亿元 经调整EBITA盈利13亿元

8月21日&#xff0c;滴滴在其官网发布2024年二季度业绩报告。 二季度&#xff0c;包括中国出行和国际业务在内的核心平台交易量为38.75亿单&#xff0c;较去年同期增长17.4%。其中&#xff0c;中国出行总单量为30.04亿单&#xff0c;较去年同期增长12.3%&#xff1b;国际业务总…

python爬虫--pyquery解析库整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理python的爬虫解析库pyquery的语法 简洁快速的整理&#xff0c;建议有前端基础的人看 pyquery解析原理 pyquery的原理就是拿到网站的前端源码后&#xff0c;我们根据我们需求信息所在的标签进行筛选。 选…

C语言第15篇

1.阅读下面的程序 #include<stdio.h> void main() { int i,j; i010; j9; printf("%d,%d",i-j,ij); } 则程序的运行结果是________. A) 1,19 B) -1,19 C) 1,17 D) -1,17 提示&#xff1a;八进制 2.以下程序段__________. x-1; do { xx*…