开篇学习arthas啦

Arthas
placeholder image
admin 发布于:2023-09-23 10:16:57
阅读:loading

1.背景介绍

从上次学习分享完《画图组件jgraphx流程图》距今也有两个月了,一直也是不停的想要继续学习新的东西,在GitHub上逛了许久之后最终选择了阿里开源的arthas,它是Java应用程序的诊断和故障排查工具,可适用于线上生成环境监控诊断的中间件。通过全局视角实时查看应用信息、内存、gc、线程的状态等信息,同时它能够在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。更为有价值的是它支持无侵入式的为程序代码进行热更新(热部署)即时生效。

很多时候对于生产问题的排查一直都是望洋兴叹的,原因可以是多种多样的,即便是分析出来加以改正也需要进行版本变更升级,若是分析不出来或者是很难分析出来也只能是再细化一些程序日志的输出进行后续的跟踪。当然了若是简单容易可以排查的问题高水平的选手一般也不会出现简单底层的问题,随便列几条问题难以分析的原因可以是以下几点:

(1)程序代码不是自己所写,受代码作者的编码水平限制,维护难度也各有不同(并不是所有人的代码都像我写的一样高端);

(2)分析代码时没有程序在执行时的现场信息,可以是方法的入参、返回值、操作系统环境信息,也许还需要方法中互相调用的参数依赖等;

(3)全凭日志文件里面记录的信息,若是异常可以依据堆栈信息得出报错的原因和指向的代码行数,否则还是很惆怅的;

2.诊断工具介绍

在正式的说本篇文章的主角之前,先列举以下一些Java自带的诊断工具跟第三方工具,详细如下:

类型名称描述

Java自带

jps

Java进程状态工具,用于列出当前系统中所有的Java进程及其进程ID。

jstat

Java统计信息监视工具,用于监视和收集Java应用程序的各种运行时信息,如堆内存使用情况、GC统计等。

jmap

Java内存映像工具,用于生成堆转储快照,查看Java应用程序的内存使用情况,如对象分布、堆内存占用等。

jstack

Java堆栈跟踪工具,用于生成Java线程的堆栈信息,用于分析线程状态、死锁、死循环等问题。

jcmd

Java命令行工具,用于动态控制Java应用程序的各种操作,如线程转储、GC执行、性能监控等。

jconsole

Java监视与管理控制台,提供了一个可视化界面,用于监控和管理运行在JVM上的Java应用程序。

jvisualvm

Java可视化监视工具,提供了一个集成的环境,用于监控、分析和调优Java应用程序。

Java Flight Recorder

Java官方提供的一种性能分析工具,能通过记录Java虚拟机及其与操作系统交互的事件来获取性能数据、制造线上问题等等。它是Java平台上最广泛使用的性能分析工具之一。

jdb

Java调试器,用于在命令行下调试Java程序,支持断点设置、变量查看、单步执行等调试功能。

第三方工具

VisualVM

一款功能强大的Java性能分析工具,提供了线程分析、堆转储、GC监控、类加载器分析等功能。

JProfiler

一款Java应用程序性能分析工具,它可以用于确定应用程序中可能存在的性能问题,并提供详细的报告和建议。

YourKit

一款Java应用程序性能分析工具,它可以帮助开发人员诊断性能问题并找到潜在的问题点。

Eclipse MAT

Eclipse Memory Analyzer Tool,用于分析Java堆转储快照,帮助定位内存泄漏和优化内存使用。

Pinpoint

一款针对于Java监控和分析工具,能够为Java应用提供实时的监控数据、性能指标和错误报告。它支持分布式系统的监控和分析,并能够在微服务和云基础架构上实现应用程序性能诊断和故障排查。

AppDynamics

支持Java、.NET等多种语言的应用程序可视化监控和管理工具,支持基于业务流程的监控和故障排查,通过提供流程映射,可在代码级别和网络级别深入了解应用程序行为。

Stackify Retrace

一款分布式应用性能监控产品,支持对Java、.NET、Node.js等编程语言的应用进行监控和分析。它可以自动检测问题并提供详细的故障排查信息。

Arthas

本文主角,系列文章

PS:上述诊断工具都在Java应用程序的性能诊断和故障排查方面有一定的使用价值,具体使用哪种工具应该根据实际情况来选择,尽管我对于上面绝大多数来讲没听过也没用过,但不重要,深挖以下Arthas就可以了,实际有兴趣的话对于JDK内置的还是知道一下为更好。

3.Arthas介绍

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

arthas-含水印.png

上图是从arthas官网截图,主要包含了arthas工具的一些主要的特性,可以看到:系统实时运行状况、查看函数调用、在线热更新代码、WebConsole在线诊断等都是比较重要的功能实现,实际它还包含有更多的特性值得去挖掘,官网介绍了一些使用它可以为你做的事情,我将依照个人的经验模拟一些应用的场景来一一实践,参考如下:

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

(1)这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

(2)我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

(3)遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

(4)线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

(5)是否有一个全局视角来查看系统的运行状况?

(6)有什么办法可以监控到 JVM 的实时运行状态?

(7)怎么快速定位应用的热点,生成火焰图?

(8)怎样直接从 JVM 内查找某个类的实例?

Arthas 旨在解决这些问题。开发人员可以在线解决生产问题。无需 JVM 重启,无需代码更改。 Arthas 作为观察者永远不会暂停正在运行的线程。Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

4.学习过程

(1)拿出时间从网上找一些相关的视频教程(博客文章),耐心去看看所讲的内容,从中了解一些;

(2)找出时间去它的官网看看资料,从第一视角出发去全面了解和继续挖掘它的知识技能细节;

(3)动手案例实践和笔记总结,结合自身情况进行有效的经验汇总;

 点赞


 发表评论

当前回复:作者

 评论列表


留言区