Java性能诊断利器:arthas详细教程

news2024/9/28 1:22:18

目录

1.概述

2.使用

2.1.安装使用

2.2.启动

2.3.全局监控

2.4.方法级别的监控 

2.4.1.插件

2.4.2.watch

2.3.3.trace

2.3.4.stack

2.4.线上问题定位

2.4.1.反编译

2.4.2.CPU占用率

2.4.3.死锁


 

1.概述

arthas是Alibaba推出的一款JVM性能诊断调优工具,主要具备以下能力:

  • 全局监控,对应用整体情况的一个监控

    • JVM的内存情况

    • 各个线程的情况

    • 运行时的环境信息

  • 方法级别的监控,对单个方法进行监控

    • watch

    • trace

    • stack

    • monitor

  • 线上问题定位,支持对线上问题进行一些排查

    • 各个进程的CPU占用率

    • 查看死锁

    • 程序反编译,用来确定当前部署的版本是不是对的。

 

2.使用

2.1.安装使用

下载地址:

https://github.com/alibaba/arthas/releases
 
下载解压后的包结构:
最核心的是arthas的应用jar

9fa4fe8dee704a89929aa720c1befc7b.png

2.2.启动

启动要监控的java进程后,再启动arthas。直接通过java -jar arthas-boot.jar可以启动arthas,启动后会列出当前可监控的JAVA进程,选择要监控的进程。

c27629a3b0b848d0a93756b30c283ba1.png

 选择好要监控的进程后,接下来就可以通过输入命令的方式来查看具体的监控内容。

2.3.全局监控

dashboard命令,实时展示全局线程情况、内存情况、运行环境信息。

7f8f6334797c4290bb68197dee60cdb7.png

 thread命令,可以查看所有线程信息。

a895ad98895e4b158865ffbc0360fad8.png

 thread -id,查看具体线程的信息。

d9689cd424c3447e9693532be1e1f8b2.png

2.4.方法级别的监控 

在我们进行调优的时候,先要定位性能问题在何处,直白来说就是往往需要定位到应用内具体的某一个方法。所以对具体方法粒度的监控是很重要,很常用的,arthas提供了一整套对于方法的监控。

方法级别的监控:

  • watch

  • trace

  • stack

  • monitor

2.4.1.插件

方法级别的监控命令后面需要跟很多参数,每次都手动输入的话会很慢,可以安装一个idea的插件,用来自动生成带参数的指令,方便高效。

fa8c8974a149426e8e5fddadde942e28.png

安装arthas idea后选中该右击方法,会有arthas command选项。  

a538dcb369df419a9d5e83cdbbc37d97.png

2.4.2.watch

watch命令用来查看方法的一些信息,如参数、返回值、异常等,

-n 执行次数

-x每次调用追进去监控的层级深度。

665a9d69c46c49199931042aa448593d.png

2.3.3.trace

trace命令用来查看方法的耗时,

-n 执行次数

 4660979d5ac24fdfa2ceced484c21d37.png

2.3.4.stack

stack命令,查看方法的调用栈,用来确定方法在何处被调用了,

-n 执行次数

966883c028574043885c938d8daf8477.png

2.4.线上问题定位

如果是一个我们已经在实际进行生产使用的一个系统,线上出了问题,根据经验来说我们可以从几个方面去考虑问题:

  • 代码的版本是否正确,从而判断是不是代码部署的问题。
  • CPU的占用率是否过高,从而判断是不是性能问题
  • 是否有死锁,从而判断是不是代码编写的问题。

arthas提供了指令用来支持以上三个维度的问题排查。

2.4.1.反编译

jda -类名,可以反编译类,用来确定当前部署的版本是不是正确的。

906f22489c4c4cb7b245c7d2654e269a.png

2.4.2.CPU占用率

thread -n 根据CPU占用率从高到低例举出指定数量的线程。

f6c9ac1b1b2e4287b4f8fe4e254cfe97.png

2.4.3.死锁

死锁首先在全局监控里可以看到所有状态为BLOCKED的死锁。

也可以通过thread -b指令来查看所有死锁。

44c5faadf9784fcda015edd5e1192df4.png

 

 

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

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

相关文章

C++之代理模式

目录 模式思想 简介 组成 优点 代码实现 情景 如果不使用代理的话: 加代理的话: 结果 模式思想 简介 代理模式: 通过代理类,来控制实际对象的访问权限。 在某些情况下,一个对象不适合或者不能直接引用另…

深入理解java虚拟机精华总结:硬件的效率与一致性、Java内存模型、Java与线程、Java与协程

深入理解java虚拟机精华总结:硬件的效率与一致性、Java内存模型、Java与线程、Java与协程 硬件的效率与一致性Java内存模型主内存与工作内存内存间交互操作对于volatile型变量的特殊规则针对long和double型变量的特殊规则原子性、可见性与有序性原子性可见性有序性 …

数学建模之灰色预测方法

数学建模之灰色预测方法 目录灰色关联度矩阵关联系数关联矩阵 GM(1,1)模型相关原理matlab程序 目录 灰色关联度矩阵 关联系数 计算关联系数公式 步骤 第一步 第二步 求参考数列和待比较数列矩阵数值做差之后的最小值和最大值 第三步利用公式计算关联度系数,其中将…

【C++修炼之路】32.智能指针

每一个不曾起舞的日子都是对生命的辜负 智能指针 一.为什么需要智能指针?二.智能指针解决new抛异常的示例三.智能指针的使用及其原理3.1 RAII3.2 SmartPtr存在的问题3.3 std::auto_ptr3.4 std::unique_ptr3.5 std::shared_ptrstd::shared_ptr的基本设计std::shared_…

海明码(汉明码)原理及其计算方法

海明码(汉明码)是一种利用奇偶性检测和纠正错误的编码方法。在传输和储存数据时,可能会发生传输错误或数据损坏。海明码通过在数据中添加冗余位来检测错误并进行纠正,提高了传输和存储数据的可靠性。 基本原理:将原始…

【数据结构复习】汉诺塔:快速回忆汉诺塔问题

题目 题解 众所周知这是一个递归问题( 我们只需要注意两点:①什么时候退出递归 ②怎么从n-1推出n ①什么时候退出递归:很明显啦,n1的时候,我们直接把A位置的唯一盘子移到C上,大功告成。 ②怎么从n-1推出n…

Vision Pro销售策略曝光,面罩/头带/屈光镜片加大零售难度

彭博社Mark Gurman再次发布了关于苹果Vision Pro的销售策略,以及零售方面的难题。 一、销售计划和策略 1,2024年初先在美国部分门店销售,仅线下购买,线上暂不开放。购买方式是先线上预约(可能要提供面部扫描图、眼镜…

Python 利用opencv识别某象旋转验证码,识别率达95%以上

本期介绍某象旋转验证码识别,识别的思想其实与上篇文章识别滑动还原验证码相似,也是借鉴过来的,但是旋转验证码更加复杂,实现起来稍加困难,下面来看一下,原始数据集和识别之后数据集。 原始数据集: 将圆图旋转成功之后的数据集: 注意:我这里仅仅抓取了几十张作为数据…

c++使用回调函数

前言 回调函数的使用场景&#xff0c;当内部逻辑不知道用户的类型时&#xff0c;让用户自己提供对应数据类型的函数。 代码 #include<iostream> using namespace std;/// <summary> /// 万能打印函数。用户调用 /// </summary> /// <param name"d…

操作系统第六章之进程同步

操作系统第六章之进程同步 参考资料来源竞争同步临界区问题标准解决方案Peterson solution 硬件同步TestAndSet指令Swap介绍 信号量SemaphoresCritical Section of n n n Processes 信号量的实现Semaphore Implementation死锁和饥饿 经典同步问题有限缓冲问题生产者进程的结构…

笔记2(DCL指令)

用处&#xff1a;用来管理数据库 用户&#xff0c;控制数据库的访问 权限 DCL – 用户管理 1.查询用户 use mysql; select * from user; 2.创建用户 create user 用户名主机名 identified by 密码; 例如&#xff1a; create user xiaojielocalhost identified by 4620; 创建…

可重入函数、volatile关键字、SIGCHLD信号

目录 一、可重入函数 二、volatile关键字 三、SIGCHLD信号 一、可重入函数 以一个链表头插为例子 main函数调用insert函数像一个链表head中插入节点node1&#xff0c;插入操作分为两步&#xff0c;刚做完第一步的时候因为硬件中断使进程切换到内核&#xff0c;再次回到用户…

Visual studio 2015下载安装以及缺包提示的处理方法

最近要加入的比赛团队需要用到Visual studio 2015&#xff0c;百度后找到很多资源&#xff0c;自己也转到了百度网盘。中英文都有&#xff0c;需要的可以下载。 链接&#xff1a;https://pan.baidu.com/s/12gpVwXfQxfdkXub-IwhWFw?pwds325 提取码&#xff1a;s325 --来自百…

linux安装交叉编译环境

1、安装系统自带的交叉编译环境 sudo apt install gcc-arm-linux-gnueabihf sudo apt install g-arm-linux-gnueabihf 2、选择特定交叉编译器版本 版本路径&#xff1a;Linaro Releases 当前选择版本&#xff1a;4.9 、64位的版本

ArcGIS栅格影像数据处理

ArcGIS栅格影像数据处理 文章目录 ArcGIS栅格影像数据处理1. 栅格影像数据坐标系转换2. 栅格数据16bit转8bit3. 栅格数据波段变换参考链接 1. 栅格影像数据坐标系转换 点击【ArcToolbox】>【数据管理工具】>【投影和变换】>【栅格】>【投影栅格】。 2. 栅格数据16…

Jetpack compose——深入了解recomposition的工作原理

一、compose怎么 实现响应式编程的 Jetpack Compose 是 Android 的现代 UI 工具包&#xff0c;它使用 Kotlin 语言的声明式 UI 模式来简化 UI 开发。在这种模式中&#xff0c;你只需描述 UI 应该如何根据应用的状态进行显示&#xff0c;而 Compose 会在状态发生变化时自动更新…

【Linux】oh-my-zsh终端配置

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍oh-my-zsh终端配置。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&am…

Spring Boot发送QQ邮件

Spring Boot发送QQ邮件 1. 创建Spring Boot项目2. 引入发邮件的starter3. 必要配置4. 编写邮件内容5. 测试其他&#xff1a; Spring Boot简单引入一个包就能轻松发邮件&#xff0c;仅需5分钟就能实现 1. 创建Spring Boot项目 略 2. 引入发邮件的starter <dependency>&l…

学习在外部Python脚本中运行Houdini的Python接口(hou模块)

0. 目标 学习在外部Python脚本&#xff08;而非Houdini编辑器内部&#xff09;使用 hou 。 主要参考Houdini官方文档 Command-Line Scripting 中的【Accessing hou from a Regular Python Shell】部分。我将要点记录在下&#xff1a; 1. 将Houdini的dll加入搜索路径 为了能…

FPGA实验五:信号发生器设计

目录 一、实验目的 二、设计要求 三、实验代码 1.代码原理分析 2.代码设计思路 3.IP核的设计与配置 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 &#xff08;1&#xff09;关于波形一些指标的介绍 &#xff08;2&#xff09;对波形转换功能的验证 &#xf…