JVM调优神器,运用 Arthas 释放 Java应用性能的全部潜力

news2024/11/19 3:45:05

Arthas、jstack、jstat 和 jmap 都是 Java 调优工具,但它们之间有以下区别:

  1. Arthas 是一款全新的 Java 诊断与调试工具,不仅可以执行传统的 JVM 监控命令,还提供了许多其他高级特性,如实时监控、动态修改代码、反编译等。相比较而言,jstack、jstat 和 jmap 更加基础,只提供了线程栈信息、垃圾回收信息、堆转储信息等。
  2. Arthas 的交互式命令行界面使得开发人员可以通过命令操作来查看和修改目标 JVM 的状态,支持实时监控和动态修改代码,极大地方便了开发和调试过程。而 jstack、jstat 和 jmap 只能通过命令行执行,无法进行实时交互。
  3. Arthas 支持监控线上应用,无需停机,对线上问题快速响应非常有优势。而 jstack、jstat 和 jmap 需要停止 JVM 进程才能进行相关分析。

虽然 Arthas、jstack、jstat 和 jmap 都是 Java 调优工具,但是 Arthas 具有更加强大的功能和交互式的命令行界面,可用于动态修改代码,更适合于在线上环境中进行 JVM 诊断和调试。而 jstack、jstat 和 jmap 更适合本地开发,或者需要停机分析的场景。

1、概述

Arthas 是一款基于 Java 开发的开源应用程序诊断工具,可以帮助开发者实时监控和分析 Java 应用程序运行情况,并进行调试和优化。

Arthas 提供了丰富的命令行工具和可视化界面,包括线程堆栈、类加载器、内存使用情况、方法执行时间等多个方面的信息,可以帮助用户快速定位并解决应用程序中的性能问题和异常情况。同时,Arthas 还支持对生产环境中的应用程序进行远程诊断和操作,极大地提高了应用程序的故障排查效率和可靠性。

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

2、快速入门

2.1. 启动 math-game

curl -O https://arthas.aliyun.com/math-game.jar
java -jar math-game.jar

math-game是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。

math-game源代码:查看在新窗口打开

2.2. 启动 arthas

在命令行下面执行(使用和目标进程一致的用户启动,否则可能 attach 失败):

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

选择应用 java 进程:

math-game进程是第 1个,则输入 1,再输入回车/enter。Arthas 会 attach 到目标进程上,并输出日志:

[INFO] Try to attach process 71560
[INFO] Attach process 71560 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'


wiki: https://arthas.aliyun.com/doc
version: 3.0.5.20181127201536
pid: 71560
time: 2018-11-28 19:16:24

$

如何出现如下异常:

[ERROR] Can not read arthas version from:  https://arthas.aliyun.com/api/latest_version
[ERROR] Can not find Arthas under local: /root/.arthas/lib and remote repo mirror: aliyun
[ERROR] Unable to download arthas from remote server, please download the full package according to wiki:  https://github.com/alibaba/arthas

按照提示到github上下载完整包。下载地址:https://github.com/alibaba/arthas到release下载arthas-bin.zip

解压arthas-bin.zip后,直接运行java -jar arthas-boot.jar然后输入对应的java进程序号就可以进行arthas了。

2.3. 查看 dashboard

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

2.4. 通过 thread 命令来获取到math-game进程的 Main Class

thread 1会打印线程 ID 1 的栈,通常是 main 函数的线程。

$ thread 1 | grep 'main('
at demo.MathGame.main(MathGame.java:17)

2.5. 通过 jad 来反编译 Main Class

2.6. watch

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

$ watch demo.MathGame primeFactors returnObj

更多的功能可以查看进阶使用。

2.7. 退出 arthas

如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。

如果想完全退出 arthas,可以执行stop命令。

2.8.命令总汇

1)help:查看所有可用的 Arthas 命令和说明。

2)jvm:查看当前 JVM 的相关信息,包括堆大小、GC 策略、线程数等。

3)classloader:查看和操作类加载器信息,包括已加载的类、类加载器层级等。

4)thread(cpu占用过高/死锁):查看和操作线程状态和堆栈信息,包括线程数量、状态、阻塞信息等。

5)trace(方法耗时及跟踪 ):跟踪指定方法的执行情况,输出方法参数、返回值、耗时等信息。

6)watch(查看函数的参数/返回值/异常信息):监控指定方法的执行情况,当指定条件满足时自动触发相应的操作。

7)sc:查看和操作 Spring 上下文信息,包括 Bean 定义、Bean 生命周期等。

8)sql:查看和操作数据库连接和 SQL 执行情况,支持常见的 JDBC 驱动程序。

9)dashboard(内存泄漏):启动 Arthas 的可视化界面,展示当前应用程序的各种运行情况。

10) jad:反编译源代码

11)tt:

  • 发现异常并查看异常 tt -t com.UserServiceImpl check //记录方法调用信息

tt -i 1001 //上面指令发现异常后,查看异常

tt -i 1001 -p //重新调用,重现异常

  • 查看、更新类成员变量值

ognl '@com.Arthas@hashSet' //查看

ognl '@com.Arthas@hashSet.add("test")' //更新

===========================================

如果文章对你有帮助,不要忘记加个关注、点个赞!

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

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

相关文章

什么是容器

什么是容器 一:概念二:容器API类图2.1 Collection2.2 Set2.3 List2.4 Map 三:详细解释3.1 Collection接口3.1.1 Collection用法 3.2 Iterator接口3.3 List接口3.4 Comparable接口 四:如何选择数据结构4.1 衡量标准:读的…

CRM系统本地部署和云部署的优缺点

众所周知,CRM系统部署方式有两种,分别是本地部署和云部署。两者各有优缺点,企业可以按照自身的需求来进行选择。下面说说CRM不同部署方式的优缺点。 CRM本地部署 本地部署是指将CRM系统安装在企业自己的服务器上,并由企业自行维…

网工届封神的五条命令

文章目录 前言一、PING:测试与目标主机的连通性二、IPCONFIG:显示网络适配器的IP地址三、tracert:测试到达目标主机的路径四、arp -a:查询本机高速缓存项目五、route print:查看计算机路由表中的项目 前言 提示:这里可以添加本文要记录的大概内容&#…

【密码产品篇】VPN产品密钥体系结构

【密码产品篇】VPN产品密钥体系结构 VPN产品只有"设备密钥"是"非对称密钥"—【蘇小沐】 IPSec VPN密钥体系 IPSec VPN密钥体系:设备密钥、工作密钥、会话密钥。 IPsec VPN作用设备密钥非对称密钥对,包括签名密钥对和加密密钥对&a…

axios 的 qs库

1.axios官网中提到的qs库 axios官网 2. content-type和 参数 的关系 content-type : application/json,要求的参数格式是JSON {a:c,b:d }content-type :application / x-www-form-urlencoded 要求的参数格式是键值对拼接的方式 :keyvalue&keyvalue ac&bd…

Powerflex ready node

1 网络交换机 需要配置 2 网卡配置 3 磁盘残留信息清楚 4 磁盘顺序如何设置固定 特别是sda这块 #rpm -qa | grep EMC --查看当前安装的EMC Powerflex组件信息 安装客户端注意 需要使用如下 rpm --import RPM-GPG-KEY-ScaleIO #MDM_IP10.10.10.xx,10.10.20.xx rpm -i EMC-…

webpack将vue3单页面应用改造成多页面应用

上篇文章搞了个单页面vue,现在要将其改成多页面,只是简单尝试,给了例子 其实也就是改个webpack的入口和html模版的配置,其他的话,每个页面都有自己的vue和路由实例,pinia的话就共享吧 !import…

界面控件DevExpress Blazor UI v22.2 - 报表、富文本编辑器组件增强

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具,该组件拥有众多新产品和数十个具有高影响力的功能,可为桌面、Web和移动应…

Linux做爬虫被封IP怎么办

如果您的 Linux 爬虫被目标网站封禁了 IP 地址,可以考虑以下几种解决方案: 1、切换 IP 地址 您可以使用代理服务器或 PPTP 等工具来改变您的 IP 地址。这些工具可以模拟不同的网络位置并使您的爬虫变得更加隐蔽。例如在 Python 中,可以通过…

Maven基础学习---2、Maven安装与配置

1、Maven核心程序解压与配置文件 1、Maven官网地址 首页: Maven – Welcome to Apache Maven(opens new window) 下载页面: Maven – Download Apache Maven(opens new window) 下载链接: 具体下载地址:https://dlcdn.apache.…

爱奇艺新财报:转机频频

配图来自Canva可画 今年开年,一部《狂飙》拉开了剧集大幕。据灯塔专业版数据显示,《狂飙》的全网正片播放市占率最高超过30%,春节期间稳定在25%以上。《狂飙》的爆火在观众群体中掀起了一波追剧狂潮,除了一路“狂飙”的收视率外&…

mysql,oracle使用区别

1.1concat,concat_ws,group_concat 配置方式 临时:SET SESSION group_concat_max_len 10240; 永久:配置文件my.ini增加group_concat_max_len10240 查看配置:show variables like group_concat_max_len; 2.1oracle-sta…

【C++】22.单例模式+类型转换

1.单例模式 1定义 之前已经学过一些设计模式 迭代器模式 -- 基于面向对象三大特性之一的 封装设计出来的 用一个迭代器类封装以后 不暴露容器结构的情况下 统一的方式访问修改容器中的数据 适配器模式 -- 体现的是一种复用 还有一些常见的设计模式如:工厂模式 装饰器模式…

定义制造业操作(定义 MES/MOM 系统)

制造业操作包含众多工厂级活动,涉及设备(定义、使用、时间表和维护)、材料(识别、属性、位置和状态)、人员(资格、可用性和时间表),以及这些资源与包含其信息碎片的众多系统之间的互…

BFT 最前线 | 腾讯发布Q1季报;超2000伙伴测试阿里云通义千问;黄仁勋:芯片是NVIDIA加速与AI计算的的“理想应用”

原创 | 文 BFT机器人 AI视界 TECHNOLOGY NEWS 01 阿里云:超2000伙伴测试通义千问 行业专属大模型将成趋势 2023阿里云常州峰会上,阿里云智能中国区总裁黄海清透露:目前通义千问大模型已有超2000个合作伙伴进行测试。未来大模型面向各行各…

微信视频怎么录屏?2个方法教您轻松录制!

案例:怎么录制微信视频通话? 【我在和家人或者朋友打微信视频电话时,总是会发生一些有趣的事情,我想把这些美好的画面通过录屏记录下来。但我不知道如何录制微信视频通话?有没有大佬支个招!】 微信视频通…

macOS Big Sur 11.7.7 (20G1345) 正式版 ISO、PKG、DMG、IPSW 下载

本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 2023 年 5 月 18 日(北京…

Boost开发指南-1.2progress_timer

progress_timer progress_timer也是一个计时器,它继承自timer,会在析构时自动输出时间,省去了timer手动调用elapsed()的工作,是一个用于自动计时相当方便的小工具。 progress_timer位于名字空间boost,为了使用progre…

浅谈PMO对组织战略的支持︱美团骑行事业部项目管理中心负责人边国华

美团骑行事业部项目管理中心负责人边国华先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:浅谈PMO对组织战略的支持。大会将于6月17-18日在北京举办,更多内容请浏览会议日程 议题内容简要: 战略是组织运行的…

Mysql【基础篇】—— mysql基础知识

Mysql【基础篇】—— mysql基础知识 ~😎 前言🙌关系型数据库SQl 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介…