java运维调优的神器Arthas---入门

article/2025/10/2 19:28:25

Arthas

Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题

一、安装启动arthas

1.下载arthas-boot.jar

官网:https://arthas.aliyun.com/doc/quick-start.html
Maven下载:

com.taobao.arthas
arthas-spring-boot-starter
3.4.8
runtime

2.启动arthas-boot.jar(就是启动arthas)

java -jar arthas-boot.jar
在这里插入图片描述

3.选择你要调试的项目

输入1 回车
在这里插入图片描述

二、常用命令

1.dashboard 数据面板

在这里插入图片描述

持续刷新的,按Ctrl+C或者Q退出

2.cls清屏

3.thread查看线程信息

在这里插入图片描述

4.jad 反编译java的class为java代码

jad com.jinhaoyang.erp.action.ProductAction(路径)
在这里插入图片描述

5.watch 监视(有点类似Debug)

watch com.jinhaoyang.erp.action.ProductAction findAllInInstruments returnobj
在这里插入图片描述

6. 退出arthas 的命令,quit或者exit退出绘画还在,stop是真正退出arthas。

在这里插入图片描述

三、基础命令之一

1.help 查询所有命令

2.cat 显示文件内容

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

在这里插入图片描述
在这里插入图片描述

sysprop | grep java -n -m10 只显示十行

在这里插入图片描述
sysprop | grep -e “\d{2,}” 正则表达式 两个数字也上的
在这里插入图片描述

4.pwd 返回当前工作目录和linux命令类似(pwd: Print Work Directory 打印当前目录)

5. cls清屏(windows一样清屏也是cls)-----linux的清屏是clear

在这里插入图片描述

四、基础命令之二

1.session :查看当前会话的信息

在这里插入图片描述

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

在这里插入图片描述

3.version:加载当前目标java进程加载的Arthas版本号

在这里插入图片描述

4.history :打印命令历史

在这里插入图片描述

5.quit 退出当前Arthas客服端,其他Arthas客服端不影响

6.stop 是关闭Arthas服务器,所有Arthas客服端全部退出。

7.keymap: Arthas快捷键列表及自定义快捷键

在这里插入图片描述
在这里插入图片描述

五、jvm相关的命令之一

1.dashboard :显示当前系统的实时数据面板,

在这里插入图片描述

2.thread 线程相关 查看当前jvm的线程堆栈信息

在这里插入图片描述

thread -i 1000 -n 3 1000毫秒内最方面的3个线程
thread --state WAITING 查看处于等待状态的线程

3.jvm 查看Java虚拟机的信息

4. sysprop 修改java临时的属性

如:sysprop user.country 改为中文的
sysprop java.version java的路径
在这里插入图片描述

六、jvm相关的命令之二

1.sysenv (System Environment Variables)

查看所有的环境变量

2. vmoption 查看虚拟机的相关的参数

vmoption PrintGCDetails true 更新指定的选项

3.getstatic 查看类的静态属性

getstatic 类名 属性

4.ognl 3.0.5版本新增的功能有一定的语法要求

语法强大但是,但是有点复杂
在这里插入图片描述

七、Class/classsloader 相关命令之一

1.sc:Search Class(缩写)

查看jvm已加载的类信息,这命令能搜索出所有已经加载到jvm中的class信息,sc默认开启了子类匹配功能。如果想要精确的匹配,打开 options disable-sub-class true 开关。
在这里插入图片描述

2.sm:Search Method (简写)

搜索类所声明的方法,父亲则无法看到。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

八、Class/classsloader 相关命令之一

1.jad 把字节码文件反编译成源代码了

在这里插入图片描述
jad java.lang.String trim 反编译String的trim方法

2.mc 在内存中把源代码编译成字节码文件

mc /root/Hello.java -d /root 把Hello.java文件编译为Hello.class到root目录下

3.redefine 加载外部的.class文件,redefine 到Jvm里

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

《Arthas进阶》

一、类和类加载器相关的命令

1.dump 将已加载的字节码文件保存到特定目录:/logs/arthas/classdump/

在这里插入图片描述
dump java.lang.String

2.classloader获取类加载器的信息

在这里插入图片描述

classloader
在这里插入图片描述
classloader -l
在这里插入图片描述
classloader -c 680f2739
在这里插入图片描述
classloader -c 680f2739 -r java/lang/String.class
在这里插入图片描述
classloader -c 680f2739 -load java.lang.String
在这里插入图片描述

3.monitor :监控指定类中的执行情况 (120秒监视一次)

在这里插入图片描述
monitor dem.MathGame primeFactors -c 5 (5秒执行一次)
在这里插入图片描述

4.watch 观察到指定方法的调用情况

在这里插入图片描述在这里插入图片描述

1.观察类中方法出参和返回值,结果属性遍历深度为2

在这里插入图片描述

2.观察方法的入参,对比前一个例子,返回值为空(事件点为方法执行前,因此获取不到返回值)

在这里插入图片描述

3.观察当前对象中的属性,如果想查方法运行前后,当前对象中的属性,可以使用target关键字,代表当前对象

在这里插入图片描述

4.查看target某一个属性 target.illegalArgumentCount

在这里插入图片描述

5.同时观察方法调用前和方法调用后,参数里-n 2,表示只执行两次

watch com.jinhaoyang.erp.action.LoginAction execute “{params,target,returnObj}” -x 2 -b -s -n 2
在这里插入图片描述

6.条件表达式的列表,输出第1参数小于的情况

watch com.jinhaoyang.erp.action.LoginAction execute “{params[0],target}” “params[0]>0”

小结
在这里插入图片描述

5.trace 对方法内部调用路径进行追踪,并输出方法路径上的每个节点上耗时。

在这里插入图片描述
在这里插入图片描述

trace函数指定类的指定方法

1.trace com.jinhaoyang.erp.action.LoginAction execute

在这里插入图片描述

红色表示执行时间最的方法

2.trace com.jinhaoyang.erp.action.LoginAction execute -n 2 执行两次

在这里插入图片描述

3.trace --skipJDKMethod false com.jinhaoyang.erp.action.LoginAction execute -n 2

在这里插入图片描述

4.调用执行时间大于某个值的(过滤)

trace com.jinhaoyang.erp.action.LoginAction execute “#cost>100”
在这里插入图片描述
小结

6.stack 输出当前方法被调用的调用路径

在这里插入图片描述

1.方法上层调用关系

stack com.jinhaoyang.erp.action.LoginAction execute

2.通过条件表达式来过滤,第0个参数的值小于0

stack com.jinhaoyang.erp.action.LoginAction execute “params[0]<0” -n 2

3.执行时间大于0.5秒的

stack com.jinhaoyang.erp.action.LoginAction execute “#cost>0.5”
在这里插入图片描述

7.tt time-tunnel时间隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同时间下调用的信息进行观测

在这里插入图片描述

1.tt -t com.jinhaoyang.erp.action.LoginAction execute 记录方法当前方法每次调用的环境现场

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
tt -i 1008
在这里插入图片描述
tt -i 1008 -p 在调用一次1008
tt -i 1008 -p --replay -times 3 调用三次1008
tt -i 1008 -p --replay -times 3 --replay-interval 2000 2秒调用一次

8.options

在这里插入图片描述
在这里插入图片描述

9.Profiler 火焰图

生成火焰图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

生成的火焰图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/5kUS1RTa.shtml

相关文章

JAVA开发运维(系统上到生产环境准备工作)

一、前言 java项目在开发环境开发完成&#xff0c;在测试环境测试没有问题后&#xff0c;就需要发布到生产环境&#xff0c;如果系统是对公众的&#xff0c;那就需要很多工作了。比如服务器申请&#xff0c;域名申请&#xff0c;渗透测试&#xff0c;漏洞扫描&#xff0c;公网…

Hi,运维,你懂Java吗-No.1:初识Java

作为运维&#xff0c;你不一定要会写Java代码&#xff0c;但是一定要懂Java在生产跑起来之后的各种机制。 本文为《Hi&#xff0c;运维&#xff0c;你懂Java吗》系列文章 第一篇&#xff0c;敬请关注后续系列文章 欢迎关注 龙叔运维&#xff08;公众号&#xff09; 持续分享运…

JAVA开发运维(软件一体化可观测平台的功能)

软件可观测是软件度量的一种。旨在对软件的数字体验、业务运营、网络性能、应用性能、基础设施、IT流程进行监控和数据刻画。使开发人员和运维人员更好的对软件进行优化维护。 一、数字体验&#xff1a; 用户会话 了解用户使用路径&#xff0c;追查使用过程中影响用户体验的…

JAVA开发运维(DevOps过程)

DevOps开发运维的一套方法论。这边文章主要借鉴万达的DevOps的建设过程。谈谈DevOps主要解决那些问题和怎么解决。 DevOps的是一种IT项目开发管理方法论&#xff0c;它旨在提供全面的持续集成、持续交付等能力&#xff0c;并持在续进行过程度量和改进&#xff0c;不断提升 IT 运…

Java项目运维总结记录

一、常见故障 1.1、Java项目CPU耗用突增100%分析定位 1&#xff09;执行top命令确认当前占用cpu的的java进程&#xff1b;以下是一些快捷键&#xff1a; ?&#xff1a;显示在top当中可以输入的命令 P&#xff1a;以CPU的使用资源排序显示 M&#xff1a;以内存的使用资源排序…

初级车道线检测

前言 上一期的无人驾驶技术入门&#xff0c;我们以障碍物的跟踪为例&#xff0c;介绍了卡尔曼滤波器的原理、公式和代码的编写。接下来的几期无人驾驶技术入门&#xff0c;我会带大家接触无人驾驶技术的另一个重要的领域——计算机视觉。 在无人驾驶技术入门&#xff08;五&a…

c++ 车道线检测

利用概率霍夫变换&#xff0c;进行车道线的简单检测 1、首先编写一个头文件&#xff08;也可以在源文件中写一个类&#xff0c;一样的&#xff09; #ifndef LANE_H //头文件的写法格式 if not define #define LANE_H //_LANE_H_ 为头文件Lane.h的大写&#xff0c;防止被重复…

简述车道线检测

针对车道线检测的任务&#xff0c;我们需要弄清楚几个问题&#xff1a; 1. 车道线的表示形式&#xff1f; 输出类型&#xff1a;掩码/点集/矢量线条实例化&#xff1a;每个车道线是否形成实例分类&#xff1a;是否对车道线进行了分类&#xff08;单白、双黄等&#xff09;提前定…

PaddleSeg:车道线检测

向AI转型的程序员都关注了这个号&#x1f447;&#x1f447;&#x1f447; 0.1 任务 要求参赛者利用提供的训练数据&#xff0c;设计一个车道线检测和分类模型&#xff0c;来检测测试数据中车道线的具体位置和类别。样例示范&#xff1a; 0.2 数据集描述 本次赛题数据集包括x张…

3D车道线检测杂记

3D车道线检测相关论文学习 单目 一、3D-LaneNet: End-to-End 3D Multiple Lane Detection-ICCV2019 0 前言 这篇文章是第一篇通过单目前视相机直接预测3D车道线的论文。 一般想得到3D车道线信息有两种途径&#xff1a; 一种是利用离线高精度地图以及准确的自车定位信息&a…

车道线检测-LSTR-论文学习笔记

论文&#xff1a;《End-to-end Lane Shape Prediction with Transformers》代码&#xff1a;https://github.com/liuruijin17/LSTR地址&#xff1a;https://arxiv.org/abs/2011.04233v2内容&#xff1a;使用 CNNTransformer&#xff0c;基于三次曲线拟合车道线 整体结构 模型输…

车道线检测学习总结

之前学习了一个非常酷炫的车道线检测项目&#xff1a;Advanced Lane Finding Project 现在写一个学习笔记&#xff0c;备注一下&#xff0c;方便以后复习&#xff1a; 项目总体流程如下&#xff1a; 第一步&#xff0c;采用棋盘对相机进行校正&#xff1a; 第二步&#xff0c;对…

2D车道线检测算法总结

关于2D车道线检测算法的总结主要分为两类&#xff1a;一类基于语义分割来做&#xff0c;一类基于anchor和关键点来做。还有基于曲线方程来做的&#xff0c;但是落地的话还是上面两种为主。 一、基于语义分割的车道线检测算法 1.LaneNet 论文创新点&#xff1a; 1.将车道线检…

车道线检测-Eigenlanes 论文学习笔记

论文&#xff1a;《Eigenlanes: Data-Driven Lane Descriptors for Structurally Diverse Lanes》 代码&#xff1a;https://github.com/dongkwonjin/Eigenlanes 核心&#xff1a;在 Eigenlane Space 中检测车道线 创新点 Eigenlane&#xff1a;数据驱动的车道描述符&#xff…

OpenCV的车道线检测

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85604275 资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85604275 final_mark.py是最终&#xff0c;前面的都是一部分一部分测试的功能&#xff0c;用的是霍夫变换拟合&…

动手学无人驾驶(7):车道线检测

最近在研究视觉语义地图&#xff0c;需要进行车道线检测&#xff0c;发现这篇车道线检测论文效果蛮好的 &#xff08;Ultra Fast Structure-aware Deep Lane Detection&#xff09;。论文作者在知乎上已经介绍过了&#xff1a;https://zhuanlan.zhihu.com/p/157530787&#xff…

高级车道线检测

基于图像处理相关技术的高级车道线检测&#xff08;可适用于弯道&#xff0c;车道线颜色不固定&#xff0c;路面阴影&#xff0c;亮光&#xff09; pipeline&#xff1a; 1.校准摄像头的畸变&#xff0c;使拍摄照片能够较完整的反映3D世界的情况 2.对每一帧图片做透视转换(pers…

传统方法车道线标注及相关知识

目录 一、图像二值化处理 1.Sobel算子绝对值 2.Sobel算子 3.倾斜角度 4.HLS颜色空间 5.二值图结合 二、车道线分割 1.仿射变换 2.车道线直方图 3.滑动窗口寻找车道线 4.车道线拟合 5.车道线区域标注 一、图像二值化处理 主要目的是通过二值化图像&#xff0c;使得车…

学习笔记之车道线相关记录

一. 车道线相关的知识 &&1.标线的分类 以下分类来自于百科&#xff1a; 按照道路交通标线的功能划分为&#xff1a;指示标线、警告标线和禁止标线。 按标划方法可分为&#xff1a;白色虚线、白色实线、黄色虚线、黄色实线、双白虚线、双白实线、双黄虚线和双黄实线…

关于python 最简单封装实例

一、 #定义一个类 class Person: #init是定义类实例初始化函数 ,没有返回return def __init__(self,name,area): self.name name self.area area #类里面定义方法 def run(self): print(self.name) …