JVM技术文档--JVM诊断调优工具Arthas--阿里巴巴开源工具--一文搞懂Arthas--快速上手--国庆开卷!!

Arthas首页  

简介 | arthas

Arthas官网文档 

Arthas首页、文档和下载 - 开源 Java 诊断工具 - OSCHINA - 中文开源技术交流社区

阿丹:

        之前聊过了一些关于JMV中的分区等等,但是有同学还是在后台问我,还有私信问我,学了这些东西,到底用在哪里?这篇文章给大家学习和介绍一下一个JVM的开源诊断工具Arthas。

Arthas是啥?

Arthas是阿里巴巴开源的Java线上诊断工具,它功能非常强大,可以解决很多线上不方便解决的问题。Arthas诊断使用的是命令行交互模式,支持JDK6+、Linux、Mac、Windows操作系统,并且命令支持使用tab键对各种信息的自动补全,使得诊断更加方便快捷。

Arthas都能诊断啥?

Arthas是由Alibaba开源的Java监控诊断工具,能够分析、诊断、定位Java应用问题,例如:

  • JVM信息、线程信息、搜索类中的方法。
  • 跟踪代码执行、观测方法的入参和返回参数等等。

Arthas最大的特点是能在不修改代码和不需要重新发布的情况下,对业务问题进行诊断,包括查看方法调用的出参入参、异常、监测方法执行耗时、类加载信息等,大大提升线上问题排查效率。

Arthas可以诊断和观测以下的一些JVM属性:

  1. 性能看板:这包括线程、CPU、内存等信息,并且会定时刷新,提供了丰富的性能诊断信息。
  2. 线程快照:根据各种条件查看线程快照,例如找出CPU占用率最高的n个线程等。
  3. JVM信息:Arthas可以输出JVM的各种信息,如GC算法、JDK版本、ClassPath等。
  4. 系统属性和环境变量:Arthas的syspropsysenv命令可以查看所有的系统变量和操作系统环境变量,也可以查看并设置某个具体的系统变量或环境变量。
  5. 类的静态属性:通过getstatic命令可以查看类的静态属性。

Arthas如何部署?

经常使用服务器的同学一定都知道一共有两种部署的方式,现在最流行也是最简单的就是直接容器化的部署,那么本篇文章我们就在docker中对这个开源工具进行容器化的部署和使用。很简单同学们只需要跟着我的步骤来就可以了。

我们的重点还是学习如何使用以及使用发现了问题我们要如何的去优化。

官方文档上给我们的方式是去直接下拉文件,然后使用//as.sh的方式来启动,或者就是通过java -jar的方式来进行启动。

从 Github Releases 页下载
https://github.com/alibaba/arthas/releases

直接使用jar包进行运行使用

用 as.sh 启动

解压后,在文件夹里有as.sh,直接用./as.sh的方式启动:

./as.sh

打印帮助信息:

./as.sh -h

用 arthas-boot 启动

或者在解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动:

java -jar arthas-boot.jar

他会自己进行检查本机上运行的java程序,然后按照数字选择就可以了。 

打印帮助信息:

java -jar arthas-boot.jar -h

注意:

Arthas在使用的时候要注意需要监控的容器的位置,阿丹在这里做一个说明如果是使用在本机的java -jar的方式来启动java程序的话,直接在本机使用上述方法就可以使用,但是如果需要监控的程序是在docker使用了容器化的方式来部署的话。

就需要按照下面的方式来完成对容器化的程序使用arthas监控。以及线上分析。

在docker中进行容器化的监控检测

对于要监控docker中的容器有两种方式

第一个是在构建镜像的时候就附带上arthas的jar包(针对还有没上线的程序-在之后的应急现在排查方便)缺点:在不需要使用的时候相当与在镜像中附带了冗余的jar包可能对存储内存不太友好。

第二个是在正在运行的docer容器中使用,在容器中容官网上下载对应的jar包,进入容器中使用。耗时因为要重新下载,有风险-如果内存设置不够。

下载arthas-boot的jar包--直接在目标文件夹的路径下运行即可

curl -O https://arthas.aliyun.com/arthas-boot.jar

通过打包dockerfile然后使用docker build -t的方式来做成镜像即可,在需要使用的时候都是通过docker进入对应的容器中找到镜像中的Jar包的位置然后使用java -jar来运行这个监控就可以了。

同时它也支持使用java探针的方式来启动

以 Java Agent 的方式启动

通常 Arthas 是以动态 attach 的方式来诊断应用,但从3.2.0版本起,Arthas 支持直接以 java agent 的方式启动。

比如下载全量的 arthas zip 包,解压之后以 -javaagent 的参数指定arthas-agent.jar来启动:

java -javaagent:/tmp/test/arthas-agent.jar -jar math-game.jar

默认的配置项在解压目录里的arthas.properties文件里。参考:Arthas Properties

Java Agent 机制参考:  

https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html

还可以直接和spring-boot项目进行整合在spring-boot项目运行的时候就直接启动一个

添加如下配置

        <dependency><groupId>com.taobao.arthas</groupId><artifactId>arthas-spring-boot-starter</artifactId><version>${arthas.version}</version></dependency>

应用启动后,spring 会启动 arthas,并且 attach 自身进程。

配置属性

比如,通过配置 tunnel server 实现远程管理:

arthas.agent-id=hsehdfsfghhwertyfad
arthas.tunnel-server=ws://47.75.156.201:7777/ws

提示

默认情况下,arthas-spring-boot-starter 会禁掉stop命令。

参考:Arthas Properties

查看 Endpoint 信息

提示

需要配置 spring boot 暴露 endpoint:参考在新窗口打开

假定 endpoint 端口是 8080,则通过下面 url 可以查看:

http://localhost:8080/actuator/arthas

{"arthasConfigMap": {"agent-id": "hsehdfsfghhwertyfad","tunnel-server": "ws://47.75.156.201:7777/ws",}
}

正式开始学习和使用arthas!!!--跟上阿丹的脚步!!!

那么我直接使用jar包启动的方式来启动arthas

这个是官方的文档 

简介 | arthas

官方的文章上面已经给了很详细的教程和介绍

点击这里提供了很完美的在线学习的平台!!本文章主要是给大家安利一下这个真的很好用!! 

 线上定位好手!!

给大家分享一个很好用的idea中的插件:

arthas idea--直接在插件市场搜索就可以了。

 当我们需要语句来监控一个类的时候可以帮助我们自动的生成很方便,只需要选中对应的类名,然后鼠标右键,点击要生成的语句就可以了。

点击之后就可以直接复制粘贴对应的语句了,直接使用就可以!非常好用!!!!

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

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

相关文章

[SWPUCTF 2021 新生赛]sql - 联合注入

[SWPUCTF 2021 新生赛]sql 一、思路分析二、解题流程 一、思路分析 这题可以参考文章&#xff1a;[SWPUCTF 2021 新生赛]easy_sql - 联合注入||报错注入||sqlmap 这题相比于参考文章的题目多了waf过滤 二、解题流程 首先&#xff0c;仍然是网站标题提示参数是wllm 1、fuzz看…

10-Node.js模块化

01.模块化简介 目标 了解模块化概念和好处&#xff0c;以及 CommonJS 标准语法导出和导入 讲解 在 Node.js 中每个文件都被当做是一个独立的模块&#xff0c;模块内定义的变量和函数都是独立作用域的&#xff0c;因为 Node.js 在执行模块代码时&#xff0c;将使用如下所示的…

springboot和vue:七、mybatis/mybatisplus多表查询+分页查询

mybatisplus实际上只对单表查询做了增强&#xff08;速度会更快&#xff09;&#xff0c;从传统的手写sql语句&#xff0c;自己做映射&#xff0c;变为封装好的QueryWrapper。 本篇文章的内容是有两张表&#xff0c;分别是用户表和订单表&#xff0c;在不直接在数据库做表连接的…

OLED透明屏交互技术:开创未来科技的新篇章

OLED透明屏交互技术作为一项前沿的科技创新&#xff0c;正在以其高透明度、触摸和手势交互等特点&#xff0c;引领着未来科技的发展。 不仅在智能手机、可穿戴设备和汽车行业有着广泛应用&#xff0c;还在广告和展示领域展现出巨大的潜力。 在这篇文章中&#xff0c;尼伽将深…

【Docker】简易版harbor部署

文章目录 依赖于docker-compose下载添加执行权限测试 安装harbor下载解压修改配置文件部署配置开机自启动登录验证 使用harbor登录打标签上传下载 常见问题 依赖于docker-compose 下载 curl -L “https://github.com/docker/compose/releases/download/2.22.0/docker-compose-…

C++并发与多线程(3) | 其他创建线程的方式

1. 用类(可调用对象) 必须要重载括号运算符,否则不是可调用对象。这种方式其实就是一个仿函数。 示例: #include <iostream> #include <thread> using namespace std;class TA { public:void operator() ()// 不能带参数 {cout << "子线程operato…

(面试)谈谈我对C++面向对象特性的理解

&#x1f4af; 博客内容&#xff1a;C读取一行内个数不定的整数的方式 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&…

IDEA的使用(一) (IntelliJ IDEA 2022.1.3版本)

目录 1. IDEA项目结构 2. 模块的导入操作 2.1 正规操作 2.2 取巧操作 2.3 出现乱码 2.4 模块改名 3. 代码模板的使用 后缀补全&#xff08;Postfix Completion&#xff09;、实时模板&#xff08;Live Templates&#xff09;菜单里面什么介绍都有&#xff0c;可以自学&a…

根据您的数据量定制的ChatGPT,改变客户服务的方式

在当今竞争激烈的商业环境中&#xff0c;提供优质的客户服务对于保持忠诚的客户群和推动业务增长至关重要。客户满意度已成为各行各企业的首要任务&#xff0c;因为它直接影响客户留存和品牌声誉。随着技术的进步&#xff0c;公司不断探索创新解决方案&#xff0c;以增强客户服…

arm 点灯实验代码以及现象

.text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R0,0x50000A28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) 第4位置1 STR R1,[R0] 1.设置GPIOF寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R…

vue实现拖拽排序

在业务中列表拖拽排序是比较常见的需求&#xff0c;常见的JS拖拽库有Sortable.js&#xff0c;Vue.Draggable等&#xff0c;大多数同学遇到这种需求也是更多的求助于这些JS库&#xff0c;其实&#xff0c;使用HTML原生的拖放事件来实现拖拽排序并不复杂&#xff0c;结合Vue的tra…

【代码随想录】LC 209. 长度最小的子数组

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 209. 长度最小的子数组 2、题目…