码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java进阶(JVM调优)——阿里云的Arthas的使用 & 安装和使用 & 死锁查找案例,重新加载案例,慢调用分析


    在这里插入图片描述

    前言

    JVM作为Java进阶的知识,是需要Java程序员不断深度和理解的。

    本篇博客介绍JVM调优的工具阿里云的Arthas的使用,安装和使用,命令的使用案例;死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案例。

    其他相关的JVM博客文章如下:

    • Java进阶(1)——JVM的内存分配 & 反射Class类的类对象 & 创建对象的几种方式 & 类加载(何时进入内存JVM)& 注解 & 反射+注解的案例
    • Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化
    • Java进阶(垃圾回收GC)——理论篇:JVM内存模型 & 垃圾回收定位清除算法 & JVM中的垃圾回收器
    • Java进阶(JVM调优)——JVM调优参数 & JDK自带工具使用 & 内存溢出和死锁问题案例 & GC垃圾回收

    系列文章合集如下:
    【合集】Java进阶——Java深入学习的笔记汇总 & 再论面向对象、数据结构和算法、JVM底层、多线程、类加载 …

    目录

    • 前言
    • 引出
    • Arthas的使用
      • 官网和初识
      • 安装和使用
        • 1.启动自己的jar包
        • 2.然后启动阿尔萨斯
        • 3.命令参考
    • 命令的使用案例
    • 死锁的场景
      • thread 线程信息
      • jad反编译
    • retransform 重新加载某一个类的类信息
    • 调用慢的问题分析
      • trace调用路径
      • monitor 方法执行监控
    • 其他使用案例
    • 总结

    引出


    1.JVM调优的工具阿里云的Arthas的使用,安装和使用;
    2.命令的使用案例,dashboard,heapdump,jvm,sm,jad;
    3.死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案例。

    Arthas的使用

    官网和初识

    阿尔萨斯官网:https://arthas.aliyun.com/doc/

    在这里插入图片描述

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

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

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

    在这里插入图片描述

    安装和使用

    curl -O https://arthas.aliyun.com/arthas-boot.jar #下载arthas
    
    java -jar arthas-boot.jar #启动阿尔萨斯
    
    • 1
    • 2
    • 3

    1.启动自己的jar包

    java -jar -Xms200m -Xmx200M -XX:+PrintGC  -XX:-UseParallelGC spring-gc-demo-1.0-SNAPSHOT.jar
    
    • 1

    在这里插入图片描述

    2.然后启动阿尔萨斯

    在这里插入图片描述

    在这里插入图片描述

    3.命令参考

    https://arthas.aliyun.com/doc/commands.html

    在这里插入图片描述

    命令的使用案例

    1.dashboard

    通过这个命令,可以查看哪根线程是最吃CPU的!替代:top -p 进程 -H

    得到进程仪表盘,当前系统的实时数据面板,按 ctrl+c 退出

    在这里插入图片描述

    2.heapdump

    替代jmap命令,dump java heap, 类似 jmap 命令的 heap dump 功能

    3.jvm

    查看当前 JVM 信息,替代jinfo命令

    在这里插入图片描述

    4.sm

    查看已加载类的方法信息

    在这里插入图片描述

    5.jad

    jad 反编译看一下

    在这里插入图片描述

    6.help

    arthas 的帮助命令

    7.memory

    查看 JVM 内存信息

    在这里插入图片描述

    8.watch

    让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值、抛出异常、入参

    死锁的场景

    thread 线程信息

    查看当前线程信息,查看线程的堆栈

    thread -h 查看帮助
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    检测死锁

    thread -b 
    
    • 1

    在这里插入图片描述

    jad反编译

    想在Linux上直接查看某一个类的源代码,可以使用它来完成代码的反编译

    在线反编译,比如:A 团队 调用 B团队的接口,当获得结果不对,那么则可以使用这种命令,在线查看B团队中的类的代码

    类似于:javap

    jad com.tianju.gc.controller.DeadLockController
    
    • 1

    在这里插入图片描述

    retransform 重新加载某一个类的类信息

    retransform

    在不停止程序的情况,重新加载某一个类的类信息

    retransform /root/CardInfo.class
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    retransform /usr/local/software/jar/java-gc-demo/CardInfo.class 
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    调用慢的问题分析

    trace调用路径

    方法内部调用路径,并输出方法路径上的每个节点上耗时

    主要用于:性能调优

    分布式系统使用:zipkin ,skywarking

    在这里插入图片描述

    在这里插入图片描述

    trace命令查看调用链

    在这里插入图片描述

    monitor 方法执行监控

    方法执行监控

    服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 命令不会引起原有业务逻辑的改变

    在这里插入图片描述

    其他使用案例

    https://github.com/alibaba/arthas/issues?q=label%3Auser-case

    https://github.com/alibaba/arthas/issues/1494

    在这里插入图片描述


    总结

    1.JVM调优的工具阿里云的Arthas的使用,安装和使用;
    2.命令的使用案例,dashboard,heapdump,jvm,sm,jad;
    3.死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案例。

  • 相关阅读:
    JVM基础学习(二):内存分配策略与垃圾收集技术
    Git版本控制工具
    什么是NIO(同步非阻塞)
    第二十一章 数据库连接池,过滤器
    【Spring-boot】Spring实现策略模式
    数据结构和算法(6):图
    【2023秋招面经】4399 前端 一面-部门初面(26min)
    面试官:如何优雅依赖多个版本的jar包?
    毕业了,感觉自己一无是处,不知道做什么,怎么办?
    Arrays数组工具类
  • 原文地址:https://blog.csdn.net/Pireley/article/details/134320335
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号