【Arthas实战】常见使用场景与命令分享

简介:

        Arthas是一款Java诊断工具,适用于多种场景,如接口响应变慢、CPU占用过高、热更新需求等。其核心命令包括实时监控面板(dashboard)、线程状态查看(thread)、方法调用链路追踪(trace)、反编译线上代码(jad)、监控方法入参和返回值(watch)、热更新代码(redefine)、方法调用耗时统计(monitor)以及生成火焰图(profiler)。

一、Arthas典型使用场景

  • 日志没报错,但接口响应突然从 50ms 飙升到 5s

  • CPU 占用 100%,但无法快速定位是哪段代码导致的

  • 热更新需求:修复 Bug 后不想重启服务

二、核心命令

1. 实时监控面板:dashboard (查看实时线程、内存、GC状态)

dashboard

2. 定位线程阻塞问题:thread

2.1 查看所有线程状态

thread

 2.2 查看ID线程实际使用

thread ID

2.3 排查CPU占用最高的线程

thread -n 3

2.4 分析死锁

thread -b

3. 追踪方法调用链路:trace
追踪指定方法的调用耗时

trace com.example.service.TestService getUserById

4. 反编译线上代码:jad

jad com.example.controller.TestController

5. 监控方法入参和返回值:watch

监控 getUserById 方法的入参和返回值

watch com.example.service.TestService getUserById "{params, returnObj}" -x 3

6. 热更新代码:redefine(不建议使用)
  • 本地修改源码后编译为 .class 文件
  • 上传到服务器并热加载

redefine /tmp/TestController.class

7. 方法调用耗时统计:monitor

每 60 秒统计一次 getUserById 的调用次数和平均耗时

monitor -c 60 com.example.service.TestService getUserById

8. 生成火焰图(定位性能瓶颈):profiler(需要安装C环境)

profiler startprofiler stop --format html

三、常见案例:

案例 1:CPU 突然飙升至 100%

1.查看 CPU 占用最高的线程

thread -n 1

2.发现线程 ID 888 的堆栈

 "http-nio-8080-exec-1" Id=888 RUNNABLE    at com.example.TestService.calculate(...)

3.反编译查看问题代码

jad com.example.TestService calculate

案例 2:接口响应缓慢

1.追踪方法调用链路

trace com.example.controller.TestController getProfile

2.发现调用数据库查询耗时 2s

trace com.example.TestService findById

3.检查 SQL 是否命中索引

watch com.example.TestService findById "{params[0]}" -x 1

案例 3:NoSuchMethodError

1.检查类加载器是否加载了正确版本

sc -d com.example.TestService

2.重新加载修复后的类

redefine /tmp/TestService.class

四、注意事项

  1. 权限控制:生产环境限制 Arthas 使用权限,避免误操作

  2. 性能影响watch/trace 等命令会增加开销,排查后及时关闭

  3. 安全风险:禁止将 Arthas 暴露在公网环境

五、总结

        个人在使用Arthas觉得可以很好的在短时间找到问题根源,进行方法级性能分析。

   👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

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

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

相关文章

Jenkins 最佳实践

1. 在Jenkins中避免调度过载 过载Jenkins以同时运行多个作业可能导致资源竞争、构建速度变慢和系统性能问题。分配作业启动时间可以防止瓶颈,并确保更顺畅的执行。如何实现? 在Cron表达式中使用H:引入抖动(jitter)&a…

pytest框架 - 第二集 allure报告

一、断言assert 二、Pytest 结合 allure-pytest 插件生成美观的 Allure 报告 (1) 安装 allure 环境 安装 allure-pytest 插件:pip install allure-pytest在 github 下载 allure 报告文件 地址:Releases allure-framework/allure2 GitHub下载&#x…

人工智能时代:解锁职业新身份,从“认证师”到“工程师”的进阶之路

在人工智能技术浪潮席卷全球的今天,技术的飞速迭代正在重塑职业版图。从算法优化到伦理决策,从系统测试到应用开发,AI技术不再只是程序员的专属领域,而是成为各行各业从业者必须掌握的“生存技能”。当企业争相布局AI赛道,个人如何在这场变革中抢占先机?答案或许藏在两个…

【带文档】网上点餐系统 springboot + vue 全栈项目实战(源码+数据库+万字说明文档)

📌 一、项目概括 本系统共包含三个角色: 管理员:系统运营管理者 用户:点餐消费用户 美食店:上传菜品与处理订单的店铺账号 通过对这三类角色的权限与业务分工设计,系统实现了点餐流程的全链路数字化&a…

window nvidia-smi命令 Failed to initialize NVML: Unknown Error

如果驱动目录下的可以执行,那可能版本原因 "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"复制"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"替换 C:\Windows\System32\nvidia-smi.exe 或者 把C:\Windows\System3…

接触感知 钳位电路分析

以下是NG板接触感知电路的原理图。两极分别为P3和P4S&#xff0c;电压值P4S < P3。 电路结构分两部分&#xff0c;第一部分对输入电压进行分压钳位。后级电路使用LM113比较器芯片进行电压比较&#xff0c;输出ST接触感知信号。 钳位电路输出特性分析 输出电压变化趋势&a…

70、微服务保姆教程(十三)Docker容器详细讲义

一、关于Docker 1.1为什么要用docker? 随着开发的项目越来越复杂,软件越来越多,服务器越来越多,我们在开发和部署的时候会遇到很多问题,比如: 1.不同的应用程序可能会有不同的应用环境,比如Java开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都…

Python 中的 typing.ClassVar 详解

一、ClassVar 的定义和基本用途 ClassVar 是 typing 模块中提供的一种特殊类型&#xff0c;用于在类型注解中标记类变量&#xff08;静态变量&#xff09;。根据官方文档&#xff0c;使用 ClassVar[…] 注释的属性表示该属性只在类层面使用&#xff0c;不应在实例上赋值 例如&…

架构与UML4+1视图

简单对比分析 架构41视图 架构41视图是由Philippe Kruchten提出的&#xff0c;用于描述软件系统的架构。它包括以下五个视图&#xff1a; 逻辑视图&#xff1a;描述系统的功能需求&#xff0c;展示系统的静态结构&#xff0c;通常使用类图、对象图等。开发视图&#xff1a;…

Redis 八股

目录 数据类型 字符串&#xff1a; List&#xff1a; HASH&#xff1a; Set&#xff1a; Zset&#xff1a; BitMap&#xff1a;&#xff08;这个及以下是后来新增的数据结构&#xff09; HyperLogLog&#xff1a; GEO&#xff1a; Stream&#xff1a; 主要数据结构 …

基于协同过滤的文学推荐系统设计【源码+文档+部署】

基于协同过滤的文学推荐系统设计 摘要 随着信息技术的飞速发展和文学阅读需求的日益多样化&#xff0c;构建一个高效、精准的文学推荐系统变得尤为重要。本文采用Spring Boot框架&#xff0c;结合协同过滤算法&#xff0c;设计并实现了一个基于用户借阅行为和社交论坛互动的文学…

鸿蒙电脑:五年铸剑开新篇,国产操作系统新引擎

出品 | 何玺 排版 | 叶媛 前不久&#xff0c;玺哥发布的《鸿蒙电脑&#xff0c;刺向垄断的利刃&#xff0c;将重塑全球PC市场格局》发布后&#xff0c;获得了读者朋友的积极反馈&#xff0c;不少都期望鸿蒙电脑早日发布。 如今&#xff0c;它真来了&#xff01; 5月8日&…

EWOMAIL

1、错误 Problem: problem with installed package selinux-policy-targeted-3.14.3-41.el8.noarch package fail2ban-server-1.0.2-3.el8.noarch requires (fail2ban-selinux if selinux-policy-targeted), but none of the providers can be installed - package fail2ban-…

qt5.14.2 opencv调用摄像头显示在label

ui界面添加一个Qlabel名字是默认的label 还有一个button名字是pushButton mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <opencv2/opencv.hpp> // 添加OpenCV头文件 #include <QTimer> // 添加定…

Spring三级缓存的作用与原理详解

在Spring框架中&#xff0c;Bean的创建过程涉及到了三级缓存机制。这个机制主要是为了提高单例模式下bean实例化和依赖注入的效率。本文将深入探讨Spring中的三级缓存&#xff0c;以及其在bean生命周期中的重要作用。 首先&#xff0c;让我们理解什么是三级缓存。Spring中的三…

IoTDB集群的一键启停功能详解

IoTDB&#xff08;Internet of Things Database&#xff09;作为一种专为物联网设计的高性能时序数据库&#xff0c;支持单机与分布式等多种部署模式。随着节点数量的增加&#xff0c;手动管理集群的启动与停止过程变得繁琐。为了提升部署效率&#xff0c;IoTDB 提供了一键启停…

Oracle学习日记--Oracle中使用单个inert语句实现插入多行记录

目录 前言&#xff1a; 问题现象&#xff1a; 问题分析&#xff1a; 解决方法&#xff1a; 1、insert into ... union all句式 2、insert all into ...select 1 from dual句式 总结&#xff1a; 前言&#xff1a; 最近项目中使用到了Oracle数据库&#xff0c;由于Oracle数…

LabVIEW 程序运行时内存不足报错原因

在 LabVIEW 程序开发与运行过程中&#xff0c;内存不足报错并退出是常见且棘手的问题。这不仅影响程序稳定性&#xff0c;还可能导致数据丢失与系统崩溃。以下从程序设计、硬件资源、系统环境等多维度深入剖析其成因&#xff0c;帮助开发者准确定位并解决问题。 ​ 一、程序设…

【GAN网络入门系列】一,手写字MINST图片生成

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒…

Baklib加速企业AI数据智理转型

Baklib智理AI数据资产 在AI技术深度渗透业务场景的背景下&#xff0c;Baklib通过构建企业级知识中台架构&#xff0c;重塑了数据资产的治理范式。该平台采用智能分类引擎与语义分析模型&#xff0c;将分散在邮件、文档、数据库中的非结构化数据转化为标准化的知识单元&#xf…