手把手教你上手开源性能监控神器Arthas

2024-05-07 13:44

本文主要是介绍手把手教你上手开源性能监控神器Arthas,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在日常的工作中,对于商业项目尤其是并发量较高的项目,系统在一些情况下会莫名其妙把CPU打满并且导致服务宕机,虽然90%的情况下,是迭代发版的代码有bug,但是既然有这个情况,线上出现事故了,领导叫你排查一下原因,这时候咋办,你总得知道怎么排查吧,大部分情况下我们根据日志可以查询到一些眉目,但是这种排查一般是只能看到内存溢出这样的原因,那么是哪个方法或者是哪个线程导致的呢,这时候就需要借助阿里巴巴的Arthas神器,这里只是众多解决方式中的一种,其他方式请自行尝试,能解决问题的方式都是最优解。

为什么选择Arthas

通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。我们要深究原因,如果重启服务的话,可能就不能复现这个问题,从而导致你的服务一致存在这个隐患。

Arthas 旨在解决这些问题。开发人员可以在线解决生产问题。无需 JVM 重启,无需代码更改。 Arthas 作为观察者永远不会暂停正在运行的线程。

Arthas可以解决什么问题

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

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

Arthas的实操

下载arthas工具

方式一: 通过Linux命令下载
wget https://alibaba.github.io/arthas/arthas-boot.jar
方式二: 直接下载jar包,再上传服务器

下载地址: arthas-boot.jar下载地址

下载好之后,通过以下命令运行:

java -jar arthas-boot.jar 

运行arthas-boot.jar之后,arthas会检测当前服务器上的Java进程,并将进程列表展示出来,用户输入对应的编号(1、2、3、4…)进行选择,然后回车(见红色框,进程[1]就是tomcat进程)。比如我这里只有一个java进程,直接输入1,然后回车即可,这样相当于就进入arthas服务了

拓展

如果你的服务是通过docker容器的形式部署,那你需要先进入到你需要排查的服务容器内,再运行arthas,一般我们值把宿主机的arthas-boot.jar复制到容器内,命令如下:

docker cp arthas-boot.jar 955c815a8848:/opt/check

说明:955c815a8848是你的容器ID,你需要替换成你自己的容器ID, /opt/check是你的容器内的文件夹目录,你可以选择自己的路径即可,后续其他操作都是一样的

arthas常用的命令

  • dashboard

输入dashboard,按回车/enter,会展示当前进程的信息,按ctrl+c可以中断执行。

 dashboard

效果如下,三个区域分别是:线程情况 ,内存情况,运行环境

参数说明

这里可以看到线程情况和JVM内存情况

id :线程IDname : 线程名state : 线程状态CPU% : 线程使用CPU的百分比heap : 使用情况ps_eden_space :伊甸园内存情况ps_survivor_space : 幸存区内存情况ps_old_gen : 老年区内存情况

当我们发现某个线程的CPU占用不正常的时候,可以通过 thread来获取进程的 Class情况

  • 查看线程监控

常用参数

(1)输入thread会显示所有线程的状态信息

(2)输入thread -n 3会显示当前最忙的3个线程,可以用来排查线程CPU消耗

(3)输入thread -b 会显示当前处于BLOCKED状态的线程,可以排查线程锁的问题

  • 函数耗时监控
    通常说一个接口性能不好,其实就是接口响应时间比较长造成的,具体代码中哪个函数耗时比较长呢?可以使用trace功能来监控一下

解释:

-j 参数可以过滤掉jdk自身的函数

cn.testfan.perf.beihe.pinter.http.CaseController是接口所在的类

time是接口的入口函数

通过圈起来的部分可以看到,接口的入口函数time总耗时371ms

其中getDataFromDb函数耗时200ms

getDataFromRedis函数耗时100ms

getDataFromOuter函数耗时50ms

process函数耗时20ms

很明显,最慢的函数已经找到了,接下来就要去对代码进行进一步分析,然后再进行优化。

  • 通过 jad 来反编译
    我们可以通过 jad 类全名 来反编译代码,进行问题排查

  • watch监听返回值

通过watch 类名#方法名 命令来查看demo.MathGame#primeFactors函数的返回值:

  • 更多命令功能
更多功能
arthas还提供了更多的功能,比如:
dashboard - 当前系统的实时数据面板
getstatic - 查看类的静态属性
heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能
jvm - 查看当前 JVM 的信息
logger - 查看和修改 logger
mbean - 查看 Mbean 的信息
memory - 查看 JVM 的内存信息
ognl - 执行 ognl 表达式
perfcounter - 查看当前 JVM 的 Perf Counter 信息
sysenv - 查看 JVM 的环境变量
sysprop - 查看和修改 JVM 的系统属性
thread - 查看当前 JVM 的线程堆栈信息
vmoption - 查看和修改 JVM 里诊断相关的 option
vmtool - 从 jvm 里查询对象,执行 forceGc

写在最后

以上就是关于arthas的实操应用讲解,了解一个思路就行,真正排查的时候差不多也只用到这几个步骤,当然深入了解一下总是好的。如果想要掌握基本的排查方式,最好动手走一个,底层码农之间的成色差异,其实不是什么天赋的差异,大多数是付出的时间差异。分享不易,不要白嫖哦,给个三连,感激不尽。欢迎持续关注"安前码后",更多内容持续输出中,下期再见!

这篇关于手把手教你上手开源性能监控神器Arthas的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP