Arthas常用命令和实践分享

news2024/9/21 18:45:00

一、序言

通常,本地开发环境无法访问生产环境。在实际工作中,我们会经常遇到在客户现场出现各种奇怪的问题,想要查看具体某个具体的对象,可能要打镜像,还要走银行内部的流程,整体很耗费时间,而且有时候还不能达到目的。现在我们采用k8s云原生进行开发和部署,容器内部调试会更加麻烦。

其次,遇到问题可以在测试环境或者预生产环境中复现问题。但是,某些问题无法在不同的环境中轻松复现,因为一旦 JVM 重新启动,它可能无法复现,甚至在重新启动后就消失了。

Arthas旨在解决这些问题,有利于我们去在线解决生产问题,无需JVM重启,无需代码更改。而且Arthas是通过命令行交互的,作为观察者永远不会暂停正在运行的线程。

Arthas官网的地址:https://arthas.aliyun.com/

二、常用命令

2.1 jvm

命令详情:查看当前的JVM的信息
在这里插入图片描述
其中DEADLOCK-COUNT用来记录当前死锁的线程数,可以帮助我们去观察JVM的一些信息。
在这里插入图片描述

2.2 memory

命令详情:查看当前JVM的内存信息,可以帮助我们去调整内存参数
在这里插入图片描述

2.3 thread

命令详情:查看当前线程信息以及线程的堆栈
thread -n N
打印当前最忙的N个线程并打印堆栈信息
在这里插入图片描述
thread -b
可以找出当前阻塞其他线程的线程
在这里插入图片描述
thread --state waiting
查看指定状态的线程
在这里插入图片描述

2.4 jad

命令详情:反编译指定的已加载类的源码
在这里插入图片描述

2.5 mc

命令详情:内存编译器,可以用来加载编译好的class文件
在这里插入图片描述

2.6 readfine

命令详情:加载外部的class文件
在这里插入图片描述

2.7 sc

命令详情:搜索已经加载到JVM中的class信息
在这里插入图片描述

2.8 trace

命令详情:方法内部调用路径,并输出方法路径上的每个节点上耗时,性能调优的时候很有用。
在这里插入图片描述

2.9 watch

命令详情:观察指定方法的调用情况,想查看一个对象在内存的具体使用情况,可以找到对应的方法,使用watch便可以观察。
在这里插入图片描述
watch参数中支持表达式,默认是params、target、returnObj,如果只是想观察参数和返回值,可以使用params、returnObj;也可以指定是在函数调用之前、函数异常之后、函数返回之后以及函数结束之后(正常返回和异常)观察;可以直接用f,上面的例子其实就是在函数结束之后观察IpushClientInfo对应的status状态。

2.10 stop

命令详情:关闭 Arthas服务端,退出所有Arthas客户端,用redefine 重新加载的类不会被重置
在这里插入图片描述

三、集成与实践

3.1 docker集成

目前arthas集成到了jdk的基础镜像,拿打包目录的基础镜像部署,默认就会携带arthas,这样无须改动到原有k8s的编排文件。

FROM openjdk:8-jdk-oracle

# copy arthas
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas

WORKDIR /home/icc/

3.2 使用方式

Arthas存在的目录是在/opt/arthas,进入该目录,运行 java -jar arthas-boot.java 便可启动Arthas,跟在虚机上的操作是一样的。
在这里插入图片描述

3.3 在线修改代码

背景:存在一个业务场景,消息下发的时候会先判断厂商的状态进而选择通道下发,测试反馈不生效。本地修改部分代码后,需要验证,但自己搭建一套环境又比较麻烦且费时,这时候就可以用Arthas的在线代码修改去验证。

首先使用sc命令查看指定类型加载信息,找到对应的class info,记录下对应的classLoaderHash值
在这里插入图片描述
用jad命令进行反编译,–source后面携带的就是对应的class信息,反编译到tmp目录
在这里插入图片描述
编辑对应的Java文件,在指定地方加上我们的代码
在这里插入图片描述
保存后使用mc内存编译器编译代码。-c指定类加载器的hash值,即sc命令看到的classLoaderHash,-d是指定输出的目录,切换到tmp可以看到编译后的class文件
在这里插入图片描述
使用readfine命令,重新加载编译后的class文件
在这里插入图片描述
重新验证对应功能,消息下发成功了。结果说明我们修改的代码是正确的,也说明Arthas在线修改代码已经生效了。

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

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

相关文章

【Python机器学习】Mean Shift、Kmeans聚类算法在图像分割中实战(附源码和数据集)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ Mean Shift算法是根据样本点分布密度进行迭代的聚类算法,它可以发现在空间中聚集的样本簇。簇中心是样本点密度最大的地方。 Mean Shift算法寻找一个簇的过程是先随机选择一个点作为初始簇中心,然后…

容器网络访问

网络分类 docker网络解决方案基于openstack平台,后演化为两派:一个是docker原生的CNM(Container Network Model),另一个是兼容性更好的CNI(Container Network Interface) 单主机网络&#xff1…

【博学谷学习记录】超强总结,用心分享|架构师-容器编排 Kubernetes简介

文章目录一、k8s简介二、核心概念2.1 节点2.1.1 Master 节点2.1.2 Node2.2 Pod2.3 Replica Set2.4 Service2.5 Namespace一、k8s简介 k8s是市场上最好的容器编排工具之一。 Kubernetes 是一个开源项目,用于统一管理容器化的应用集群。 Kubernetes 负责在大规模服务…

疫苗预约系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):

【AIOT】串口操作基于PyQT窗口工具编写

1. Serial Type 1.1. 物理接口形式 UART接口:通用异步收发器(Universal Asynchronous Receiver/Transmitter),UART是串口收发的逻辑电路,这部分可以独立成芯片,也可以作为模块嵌入到其他芯片里,单片机、S…

【机器学习---03】感知机模型

文章目录1. 感知机模型是什么?有什么作用?2. 三要素2.1 模型2.2 策略2.3 算法1. 感知机模型是什么?有什么作用? 定义:感知机模型是建立将训练数据完全划分为2类的超平面。 注意: 由于感知机只关心将样本分开…

清越科技将开启申购:预计募资约8亿元,高裕弟为实际控制人

12月19日,苏州清越光电科技股份有限公司(下称“清越科技”,SH:688496)将开启申购。据贝多财经了解,清越科技本次上市的发行价格为9.16元/股,发行数量为9000万股,募资总额约为8.24亿元&#xff0…

深入哈希结构

目录 一、哈希结构概念 二、哈希冲突 三、哈希函数 3.1 哈希函数设计原则 3.2 常见哈希函数设计方法 1. 直接定址法--(常用) 2. 除留余数法--(常用) 3. 平方取中法 4. 折叠法 5. 随机数法 6. 数学分析法 3.3 处理key的局限性问题 四、通过闭散列解决哈希冲突 4.1…

GeoServer安装MBTiles插件

GeoServer安装MBTiles插件 之前介绍过GeoServer使用mvt插件来生成矢量切片,这种mvt切片本质上还是前台加载GeoJson数据,数据是由前端进行渲染加载的,数据存储在浏览器内存中,前台会承担渲染的压力,数据量过大的话&…

数字电子技术(六)时序逻辑电路

时序逻辑电路时序逻辑概述时序逻辑电路特点基本方程组时序逻辑电路的分类自启动同步时序逻辑电路的分析方法(*考点)分析步骤例题分析常用的时序逻辑电路模块寄存器与移位寄存器计数器二进制计数器十进制计数器任意进制计数器(*考点&#xff0…

Python -- 高阶函数

目录 1.递归函数 2.匿名函数 3.高阶函数 3.1 定义一个变量指向函数 3.2 函数作为另一个函数的参数 3.3 函数作为另一个函数的返回值 1.递归函数 什么是递归函数? 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归…

【SVM时序预测】基于matlab粒子群算法优化支持向量机PSO-SVM期贷时序数据预测【含Matlab源码 2289期】

⛄一、PSO-SVM介绍 1 SVM SVM是Vapnik提出的一种分类技术,这一技术具有坚实的统计理论基础。SVM可以将原始的数据映射到高维且线性可分的空间,扩展了线性不可分的样本数据,它是使用核函数将线性不可分转换为线性可分。 如果问题为线性不可分…

计算机毕业设计springboot+vue+elementUI进销存管理信息系统

项目介绍 本次系统设计是一个纺织企业进销存管理信息系统,主要目的是为了提升绿 岩纺织科技有限公司的进销存管理能力,实现绿岩纺织科技有限公司的采购/加 工管理、仓库管理、销售管理等功能。 1.基本信息模块 ;1;商品管理:主要包含商品信息的展示以及添加商品功能。…

Java+MySQL基于SSM的在线论坛交流系统

信息和交流是一个一直伴随着人类一生的话题,从人类诞生开始就已经拥有了这一概念,无论是远古时候的打猎还是现代化的多样化合作都离不开信息和交流。随着时代的积累,人们要面对的信息量也越来越大,任何一个人体单位的人类都不可能涉及到全部的知识,这就需要大家不断的进行交流才…

springboot之多数据源---1

一、多数据源的典型使用场景 在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况。以下是两种典型场景: 1 业务复杂(数据量大) 数据分布在不同的数据库中,数据库拆了, 应用没拆。 一个公司…

Git 分布式版本控制工具 05SSH免登陆:如何使用SSH如何免密登录服务器~

6 ssh免登陆 SSH是目前比较可靠的专为远程登录会话和其他网络服务提供安全的协议。不同主机之间在进行通信时,一般都是需要输入密码进行验证, ssh免密码之后,只要通过指定主机地址和端口号就可以实现不同的计算机之间访问时,不需…

基于web的网上图书商城的设计与实现/图书购物系统

摘 要 本毕业设计的内容是设计并且实现一个基于JSP技术的网上图书商城。它是在Windows下,以MYSQL为数据库开发平台,Tomcat网络信息服务作为应用服务器。网上图书商城的功能已基本实现,主要包括个人中心、图书分类管理、用户管理、图书信息管…

Android12指纹框架完全解析(一)

前言:自从Android6.0开始Google官方出了标准的Android指纹框架,结束了各家指纹厂商各自为政的局面,推动了电容指纹在Android的发展;自从2017年新思的屏下指纹方案横空出世,后边汇顶等指纹厂商跟进,Android …

【Linux】shell命令以及运行原理

shell命令1.用户不能直接使用操作系统2.Linux是一个操作系统3.在软件层面操作Linux系统4.shell运行原理1.用户不能直接使用操作系统 首先在讲shell命令之前,我们要知道 “用户是不能直接在操作系统上操作的,只能在操作系统之上,也就是软件层面…

基于两阶段鲁棒优化算法的微网多电源容量配置(Matlab)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…