IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Arthas常用命令和实践分享 -> 正文阅读

[游戏开发]Arthas常用命令和实践分享

一、序言

通常,本地开发环境无法访问生产环境。在实际工作中,我们会经常遇到在客户现场出现各种奇怪的问题,想要查看具体某个具体的对象,可能要打镜像,还要走银行内部的流程,整体很耗费时间,而且有时候还不能达到目的。现在我们采用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在线修改代码已经生效了。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:39:00  更:2022-12-25 11:41:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/19 14:39:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码