Arthas 使用

Arthas是阿里巴巴开源的Java诊断工具,采用命令行交互的形式进行问题的定位与诊断。它能够帮助你.

解决以下问题:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从JVM内查找某个类的实例?
    下面就实际常用到的功能做一些简单介绍:

Arthas 安装与使用

https://github.com/alibaba/arthas

在局域网的离线环境下,需要下载arthas的全量包
在这里插入图片描述

Idea Arthas 插件安装

可能你会觉得写Arthas的命令很繁琐,初学者写命令效率低,Idea中arthas插件可以解决这一问题。
在Idea插件中搜索“arthas”,下载“arthas-idea”插件,如下图所示:
在这里插入图片描述
在这里插入图片描述

使用步骤

  1. 将arthas包复制到服务器;
  2. 查找对应java服务的进程号;
[root@host-10-19-141-49 hik]# lsof -i:8041
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Jsvc 60164 root 398u IPv4 2662812937 0t0 TCP *:8041 (LISTEN)
  1. 执行以下命令,进入arthas命令界面;
  2. 选择对应的进程号(输入数字,选择具体的进程号);

常用基础命令:

help——查看命令帮助信息

cat——打印文件内容,和 linux 里的 cat 命令类似

pwd——返回当前的工作目录,和 linux 命令类似

cls——清空当前屏幕区域

session——查看当前会话的信息

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

有增强过的类

version——输出当前目标 Java 进程所加载的 Arthas 版本号

history——打印命令历史

quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响

shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出

keymap——Arthas 快捷键列表及自定义快捷键

sysenv: Display the system env.

sysprop: Display, and change the system properties

reset: Reset all the enhanced classes

dump: Dump class byte array from JVM

options: View and change various Arthas options

getstatic Show the static field of a class

sc: Search all the classes loaded by JVM

sm: Search the method of classes loaded by JVM

classloader: Show classloader info

dashboard:显示出线程(按照 cpu 占用百分比倒排)、内存(堆空间实时情况)、GC

情况等数据

在这里插入图片描述

thread:用来查看当前 jvm 中的线程信息.

在这里插入图片描述

jvm:查看当前 jvm 信息

在这里插入图片描述

watch:能方便的观察到指定方法的调用情况,返回值、抛出异常、入参(特殊值、异常没有捕获排查)

watch [class-pattern] [method-pattern] [express] params

其中class-pattern为类名的表达式,method-pattern为方法名表达式,express为观察表达式,
params是可以添加的一些参数信息。具体可查看官方文档。
在使用Arthas前,定位排查数据问题主要有两种方式:

  • 日志:排查前需要写入日志代码,重新打包部署,不适合生产环境。
  • 远程Debug:需开设debug端口,安全性差,阻塞环境中的应用程序,对使用的其他人员产生影响,不利于合作。

而使用Arthas定位问题,对环境几乎无影响,定位效率高。

示例:

watch com.hikvision.omcmdb.web.model.ModelRestful deleteModelCategory 
'{params,returnObj,throwExp}' -n 5 -x 3 

-n 5 表示只执行五次,防止被刷屏
-x 2 来指定打印对象的属性遍历深度
在这里插入图片描述

trace:方法内部调用路径,并输出方法路径上的每个节点上耗时(性能问题,调用链问题)

trace命令查看方法内部的调用路径,并且可以查看每个路径上的耗时。其使用方式如下:

trace [class-pattern] [method-pattern] [condition-express] params

其中class-pattern为类名的表达式,method-pattern为方法名表达式,condition-express为条件表达式,params是可以添加的一些参数信息。具体可查看官方文档。
下面为一次使用trace命令定位接口超时问题实例

示例2
下面为一次使用trace命令定位接口超时问题实例:
一次通过F12发现控制台一个接口很长时间没有响应数据,该接口用于查看工单的待办数量,于是使用
trace命令监控该接口如下图所示:

在这里插入图片描述
可以看到方法内部调用OrderCommonService.orderStatistics()方法时耗时了60秒之多,严重超时了,
于是继续使用trace命令监控OrderCommonService.orderStatistics()方法进一步定位超时位置,如此方
式,最终定位出是由于调用HOSP的查询用户区域权限方法引发的超时。整个过程图如下所示:
在这里插入图片描述
在这里插入图片描述

trace com.hikvision.omcmdb.web.model.ModelRestful deleteModelCategory -n 5 --
skipJDKMethod false

在这里插入图片描述

monitor:方法执行监控(性能问题排查,一段时间内的性能指标) 统计每个接口的运行情况

$ monitor -c 5
com.hikvision.ga.xalarm.acs.modules.provider.balarm.api.deploy.service.impl.DeployFace
XRestServiceImpl saveDeployFaceDetailInfo
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 156 ms.
timestamp class
method total success fail
avg-rt(ms) fail-rate
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
------------------------
2019-08-20 09:18:13
com.hikvision.ga.xalarm.acs.modules.provider.balarm.api.deploy.service.impl.DeployFace
XRestServiceImpl saveDeployFaceDetailInfo 1 1 0 9.01 0.00%
timestamp class
method total success fail
avg-rt(ms) fail-rate
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
------------------------
2019-08-20 09:18:18
com.hikvision.ga.xalarm.acs.modules.provider.balarm.api.deploy.service.impl.DeployFace
XRestServiceImpl saveDeployFaceDetailInfo 1 1 0 2.81 0.00%
timestamp class
method total success fail
avg-rt(ms) fail-rate
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
------------------------
2019-08-20 09:18:23
com.hikvision.ga.xalarm.acs.modules.provider.balarm.api.deploy.service.impl.DeployFace
XRestServiceImpl saveDeployFaceDetailInfo 0 0 0 0.00 0.00%
timestamp class
method total success fail
avg-rt(ms) fail-rate
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
------------------------
2019-08-20 09:18:28
com.hikvision.ga.xalarm.acs.modules.provider.balarm.api.deploy.service.impl.DeployFace
XRestServiceImpl saveDeployFaceDetailInfo 1 1 0 2.54 0.00%

stack:获取方法从哪里执行的调用栈(用途:源码学习调用堆栈,了解调用流程) 查看方法的调用路径

stack
com.hikvision.ga.xalarm.acs.modules.provider.balarm.api.deploy.service.impl.DeployFace
XRestServiceImpl saveDeployFaceDetailInfo
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 147 ms.
ts=2019-08-20 09:14:29;thread_name=XNIO-2 task-
125;id=101;is_daemon=false;priority=5;TCCL=org.springframework.boot.loader.LaunchedURL
ClassLoader@55183b20
@com.hikvision.ga.xalarm.acs.modules.provider.balarm.api.deploy.service.impl.DeployFac
eXRestServiceImpl.saveDeployFaceDetailInfo()
at
sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:140)
at
org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.jav
a:294)
at
org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:248)
at
org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:235)
at
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)
at
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)
at
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletCo
ntainerDispatcher.java:227)
at
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDis
patcher.java:56)
at
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDis
patcher.java:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java
:129)
at
org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(Ap
plicationContextHeaderFilter.java:55)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java
:107)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java
:131)
at
org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebReque
stTraceFilter.java:111)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java
:107)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java
:131)
at
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFil
ter.java:99)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java
:107)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java
:131)
at
org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormCo
ntentFilter.java:109)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java
:107)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java
:131)
at
org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMetho
dFilter.java:93)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java
:107)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java
:131)
at
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncod
ingFilter.java:197)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java
:107)

tt:方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并

能对这些不同的时间下调用进行观测

jad 反编译具体类

jad
com.hikvision.ga.xalarm.acs.modules.provider.balarm.api.deploy.service.impl.DeployFace
XRestServiceImpl
ClassLoader:
+-sun.misc.Launcher$AppClassLoader@c387f44
+-sun.misc.Launcher$ExtClassLoader@56de6d6b
Location:
/opt/opsmgr/web/components/xalarm.1/bin/xalarm-acs/lib/xalarm-acs-provider-
1.1.1000.RELEASE.jar
/*
* Decompiled with CFR 0_132.
*/
package com.hikvision.ga.xalarm.acs.modules.provider.balarm.api.deploy.service.impl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hikvision.ga.common.BasePage;
import com.hikvision.ga.common.BaseResult;
import com.hikvision.ga.common.BusinessException;
import com.hikvision.ga.logger.build.HikGaLoggerFactory;
import com.hikvision.ga.logger.log.HikGaLogger;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.dto.DeployFaceDTO;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.dto.DeployFaceForm;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.dto.ResourceDto;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.mapper.entity.DeployFace;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.query.dto.CondiFaceLibDTO;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.res.dto.DynTreeNode;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.res.dto.FaceScopeCheck;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.res.dto.Result4FaceLibDTO;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.res.dto.TreeNodeParams;
import com.hikvision.ga.xalarm.acs.balarm.api.deploy.service.DeployFaceXRestService;
import com.hikvision.ga.xalarm.acs.modules.deploy.service.DeployFaceBackIacService;
import com.hikvision.ga.xalarm.acs.modules.deploy.service.DeployFaceService;
import com.hikvision.ga.xalarm.acs.modules.deploy.service.DeployFaceSuperBrainService;
import com.hikvision.ga.xalarm.acs.modules.deploy.service.DeployService;

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

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

相关文章

活动回顾|阿里云云原生 Serverless 技术实践营 深圳站回放PPT下载

11月24日“阿里云云原生 Serverless 技术实践营”深圳站圆满落幕。活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主,活动形式为演讲、动手实操,让开发者通过一个下午的时间增进对 Serverless 技术的理解,快速上手…

visual Studio MFC 绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、边框渐变的正方形与填充渐变的正方形实例

MFC 绘制三角形 本文使用visual Studio MFC 平台实现绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、边框渐变的正方形与填充渐变的正方形. 关于基础工程的创建请参考Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线 文章目录 MFC 绘制三角形…

在Python中matplotlib函数的plt.plot()函数的颜色参数设置,以及可以直接运行的程序代码!

文章目录 前言一、使用字符串颜色:二、使用十六进制颜色:三、使用RGB元组:四、使用颜色映射:总结 前言 在matplotlib中,plt.plot()函数可以接受颜色参数,可以设置为字符串颜色(如red&#xff0…

瓶盖内的条码需要注意哪些?,才能帮助企业有效搭建与消费者沟通~

在不断发展的消费品领域,特别是饮料行业,组织不断寻求创造性的方法来扩大客户参与度、增强品牌忠诚度并消除假冒产品。一种获得认可的新兴方法是在瓶盖和瓶盖上实施DataMatrix 条形码扫描。这种创新方法提供了许多好处,从改善消费者互动到强化…

利用广度优先或模拟解决米诺骨牌

本周推荐阅读 C二分算法:得到子序列的最少操作次数 题目 n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立。在开始时,同时把一些多米诺骨牌向左或向右推。 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样…

Python基础教程:强大的Pandas数据分析库

Pandas是一个基于 NumPy 的非常强大的开源数据处理库,它提供了高效、灵活和丰富的数据结构和数据分析工具,当涉及到数据分析和处理时,使得数据清洗、转换、分析和可视化变得更加简单和高效。本文中,我们将学习如何使用Pandas来处理…

BEV+Transformer架构加速“上车”,智能驾驶市场变革开启

BEVTransformer成为了高阶智能驾驶领域最为火热的技术趋势。 近日,在2023年广州车展期间,不少车企及智能驾驶厂商都发布了BEVTransformer方案。其中,极越01已经实现了“BEVTransformer”的“纯视觉”方案的量产,成为国内唯一量产…

使用Pytorch从零开始构建Normalizing Flow

归一化流 (Normalizing Flow) (Rezende & Mohamed,2015)学习可逆映射 f : X → Z f: X \rightarrow Z f:X→Z, 在这里X是我们的数据分布,Z是选定的潜在分布。 归一化流是生成模型家族的一部分,其中包括变分自动编…

系列二十、Spring循环依赖问题

一、概述 循环依赖是指多个bean之间相互依赖,形成了一个闭环。比如A依赖于B、B依赖于C、C依赖于A,形成了一个圈,如: 二、循环依赖案例 2.1、构造方法注入产生循环依赖案例 2.1.1、ServiceA /*** Author : 一叶浮萍归大海* Date…

AntDB数据库,通信行业20年变迁的见证者

2000年至今,通信行业发展已过了20多年。面对通信行业巨大的数据信息,数据库在行业发展中发挥了巨大的作用,AntDB数据库便是其中较为知名的一款数据库。在通信行业快速发展的阶段,打破国外产品与技术垄断是产业发展的重点与难点。面…

处理分类问题的不平衡数据的 5 种技术

一、介绍 分类问题在机器学习领域很常见。正如我们所知,在分类问题中,我们试图通过研究输入数据或预测变量来预测类标签,其中目标或输出变量本质上是分类变量。 如果您已经处理过分类问题,那么您一定遇到过以下情况:其…

HTML5原生视频播放器组件video的videocontrolslist属性详解

HTML5提供了内置的视频播放控件,其中videocontrolslist是其中一个很有用的属性。videocontrolslist属性可以用于告诉浏览器在视频播放过程中应该显示哪些默认的用户界面控件。下面我们将从几个方面来介绍videocontrolslist的详细使用。 一、启用videocontrolslist videocont…

2024重庆大学计算机考研分析

24计算机考研|上岸指南 重庆大学 重庆大学计算机考研招生学院是计算机学院和大数据与软件学院。目前均已出拟录取名单。 重庆大学计算机学院是我国高校最早开展计算机研究的基地之一,1978年和1986年获西南地区首个硕士和博士点,1998年成立计算机学院&a…

单片机学习2——流水灯的实现

#include<reg52.h>sbit LED P1^0; unsigned char i;void main() {while(1){LED 0;for(i0;i<100;i);LED 1;for(i0;i<100;i);} } RST是复位按钮&#xff0c;单击一下之后&#xff0c;程序就会跑到最开始的位置运行。 右侧的按钮是RUN按钮&#xff0c;单击下&…

ShardingSphere-JDBC 入门教程(v4.1.1)

框架介绍 ShardingSphere-JDBC 定位为轻量级 Java 框架&#xff0c;在 Java 的 JDBC 层提供的额外服务。它使用客户端直连数据库&#xff0c;以 jar 包形式提供服务&#xff0c;无需额外部署和依赖&#xff0c;可理解为增强版的 JDBC 驱动&#xff0c;完全兼容 JDBC 和各种 OR…

利用ogr2ogr从PostGIS中导出/导入Tab/Dxf/Geojson等格式数据

ogr2ogr Demo Command 先查看下当前gdal支持的全部格式&#xff0c;部分gdal版本可能不支持PostGIS。 如出现PostgreSQL表名支持。 #全部支持的格式 ogrinfo --formats | sort #AVCBin -vector- (rov): Arc/Info Binary Coverage #AVCE00 -vector- (rov): Arc/Info E00 (ASC…

数据结构——动态规划

动态规划&#xff1a;有很多重叠子问题&#xff0c;每一个状态一定是由上一个状态推导出来的 贪心&#xff1a;没有状态推导&#xff0c;而是从局部直接选最优的 动规五步曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 确定递推公式&#xff08;容…

STM32-SPI1控制AD7705(Sigma-Delta-ADC芯片)

STM32-SPI1控制AD7705&#xff08;Sigma-Delta-ADC芯片&#xff09; 原理图手册说明功能方框图引脚功能 片内寄存器通信寄存器&#xff08;RS2、RS1、RS00、0、0&#xff09;设置寄存器时钟寄存器数据寄存器&#xff08;RS2、RS1、RS00、1、1&#xff09;测试寄存器&#xff08…

SAP Smartforms设计

第八章 SMART FORMS设计 要点列表 概览&#xff1b; Form&#xff08;表格&#xff09;&#xff1b; Smart Styles&#xff08;样式&#xff09;&#xff1b; Text Module&#xff08;文本模块&#xff09;&#xff1b; 使用标准表方式打印&#xff1b; 使用模板方式打印…

淼一科技为互联网企业销毁硬盘数据 拆除机房设备

在上海这座繁华的大都市&#xff0c;淼一科技以其专业的服务和卓越的技术&#xff0c;为众多互联网企业提供硬盘数据销毁和机房设备拆除服务。作为业界领先的数据安全解决方案提供商&#xff0c;淼一科技致力于保障客户数据的安全与隐私&#xff0c;为客户创造更高的商业价值。…