arthas源码刨析:启动 (1)

2024-08-22 11:04
文章标签 源码 启动 arthas 刨析

本文主要是介绍arthas源码刨析:启动 (1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 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 pidif (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/2166pb.environment().put("JAVA_TOOL_OPTIONS", "");try {final Process proc = pb.start();Thread redirectStdout = new Thread(new Runnable() {@Overridepublic void run() {InputStream inputStream = proc.getInputStream();try {IOUtils.copy(inputStream, System.out);} catch (IOException e) {IOUtils.close(inputStream);}}});Thread redirectStderr = new Thread(new Runnable() {@Overridepublic 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);}

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

这篇关于arthas源码刨析:启动 (1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096085

相关文章

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听