1 阿里在线分析诊断工具Arthas(阿尔萨斯)

参考: https://alibaba.github.io/arthas/

参考: https://github.com/alibaba/arthas/blob/master/README_CN.md

2 阿里在线分析诊断工具Jvm-Sandbox(JVM沙盒)

参考: https://github.com/alibaba/jvm-sandbox

3 Arthas与Jvm-Sandbox比较

Arthas就像是一个剑冢,如果你希望得到一把宝剑就进去拿就好了! 它提供了各式各样的命令可以满足你的各项业务需求,上手成本较高。

Jvm-Sandbox就像是一个剑炉,其提供了Module的概念,每个Module都是一个AOP的实例,也就是一把剑,怎么样锻造取决于工匠,也就是你啦!它提供了模型,具体实现需要你自己编写,灵活性更高。上手成本相对较低

  • 下面将通过日常碰到的需要添加日志的需求,对两个开源项目的进行体验。

4 添加日志案例

项目地址: https://github.com/70416450/Online-debugging-demo

  • 针对springboot-demo项目
  1. 使用 mvn clean install命令编译
  2. 上传springboot-demo-1.0-SNAPSHOT.jar包到服务器上
  3. 使用java -jar springboot-demo-1.0-SNAPSHOT.jar启动项目,看见如下效果

4.1 Jvm-Sandbox体验

4.1.1 下载解压

# 下载最新版本的JVM-SANDBOX
wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip # 解压
unzip sandbox-stable-bin.zip

4.1.2 挂载目标应用

# 进入沙箱执行脚本
cd sandbox/bin # 常用命令!!!
# 目标JVM进程93726(使用jps命令查看)
./sandbox.sh -p 93726
#卸载沙箱
./sandbox.sh -p 93726 -S
#查询沙箱
./sandbox.sh -p 93726 -l
#刷新沙箱
./sandbox.sh -p 93726 -F
#使用自定义module执行(my-sandbox-module:自定义的module名字,addLog自定义切入方法名字)
./sandbox.sh -p 93726 -d 'my-sandbox-module/addLog' #日志配置及查看
#配置文件在 /sandbox/cfg/sandbox-logback.xml
#默认日志路径 ~/logs/sandbox/sandbox.log

  • 针对springboot-demo项目
  1. 使用 mvn clean compile assembly:single 打包,上传至sandbox/sandbox-module目录下
  2. 回到bin目录,
    • ./sandbox.sh -p 93726 -S 停止沙箱
    • ./sandbox.sh -p 93726 -F 刷新沙箱
    • ./sandbox.sh -p 93726 -l 查看沙箱
    • ./sandbox.sh -p 93726 -d 'my-sandbox-module/addLog' 使用自定义module执行(my-sandbox-module:自定义的module名字,addLog自定义切入方法名字)
  3. 切换到springboot-demo项目日志查看

4.2 Arthas体验

  • 下载idea插件 Alibaba Cloud Toolkit https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit/

  • 添加服务器地址并打开Arthas监控

  • 输入数字选择对应的进程

  • 启动成功

  • 通过sc命令查找需要修改的class的ClassLoader

  •  sc -d *TestAdd | grep classLoaderHash
  • 修改TestAdd

  • 将重新编译的class文件上传至服务器指定目录

  • 再使用redefine命令重新加载新编译好的TestAdd.class(注意hash码和需要替换的类路径)

  • redefine -c 439f5b3d /usr/local/src/jvm-sandbox/test/TestAdd.class
  • 注意点:

    • 重启项目可以恢复
    • 不允许新增加field/method
    • 正在跑的函数,没有退出不能生效

线上调试工具 jvm-sandbox使用的更多相关文章

  1. Java程序线上故障排查

    目录 一.Linux 内存和cpu 网络 磁盘 /proc文件系统 二.JVM Java堆和垃圾收集器 gc日志分析 JVMTI介绍 Attach机制 java自带工具 三.三方工具 jprofile ...

  2. 记一次线上Curator使用过程JVM栈溢出解决

       为了同学们看起来一目了,特按如下思路进行讲解. 1.出现的场景    2.分析及解决的过程    3.总结 最近公司要使用zookeeper做配置管理(后面简称ZK),然后自己就提前用虚拟机进行 ...

  3. JVM 线上故障排查基本操作

    # 前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的.各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题.楼主同样也遇到过这些问题,那么,遇到这些问题该 ...

  4. 【jvm】来自于线上的fullGC分析

    系统最近老年代的内存上升的比较快,三到四天会发生一波fullGC.于是开始对GC的情况做一波分析. 线上老年代2.7G,年轻带1.3G老年代上升较快,3天一波fullGC,并且fullGC会把内存回收 ...

  5. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态?

    https://alibaba.github.io/arthas/ Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决 ...

  6. 记一次线上事故的JVM内存学习

    今天线上的hadoop集群崩溃了,现象是namenode一直在GC,长时间无法正常服务.最后运维大神各种倒腾内存,GC稳定后,服务正常.虽说全程在打酱油,但是也跟着学习不少的东西. 第一个问题:为什么 ...

  7. 大厂面试经:说一下你们线上JVM是如何优化的?

    JVM(Java虚拟机)简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭.飞机的场景(面试)不懂JVM的你,会被 ...

  8. 一个线上JVM的CPU资源占用过高问题的排查

    原文:https://www.iteye.com/blog/tyrion-2293369 上午线上某应用的一台JVM的CPU占比突然飙高到192%,并且一直下不来,导致监控一直告警,好久没处理这种问题 ...

  9. JVM 线上故障排查基本操作--内容问题排查

    内存问题排查 说完了 CPU 的问题排查,再说说内存的排查,通常,内存的问题就是 GC 的问题,因为 Java 的内存由 GC 管理.有2种情况,一种是内存溢出了,一种是内存没有溢出,但 GC 不健康 ...

随机推荐

  1. 个人永久性免费-Excel催化剂功能第98波-零代码零距离轻松接触并拥有金融大数据

    数据产生价值的一个最突出的领域-金融领域,股票.证券.上市公司财务报表等,多少人在其中发掘出宝贵的数据价值.今天Excel催化剂联合Tushare金融大数据平台,让这一切的数据都能成为你我普通人零代码 ...

  2. Spark学习之第一个程序 WordCount

    WordCount程序 求下列文件中使用空格分割之后,单词出现的个数 input.txt java scala python hello world java pyfysf upuptop wintp ...

  3. 集群之间配置 SSH无密码登录

    集群之间配置 SSH无密码登录 配置 ssh (1)基本语法 ssh 另一台电脑的 ip 地址 (2)ssh 连接时出现 Host key verification failed 的解决方法 # ss ...

  4. 深入理解Java中的锁(一)

    Java中锁的概念 自旋锁 : 是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断判断锁是否能够被成功获取,直到获取到锁才会退出循环. 乐观锁 : 假定没有冲突,在 ...

  5. HTML结构 语义化思想

    总体思想:用正确的标签做正确的事情! 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析. 主要体现: 1. 对用户而言, ...

  6. Java oop 多态

      1.多态指对象的多种形态:引用多态与方法多态   注意: A:继承是多态的实现基础 B:方法重写也是多态的体现   2.引用多态 A:父类的引用可以指向本类的对象:父类 对象名 = new 父类( ...

  7. Deque 和Queue

    概述 接口,一个线性结合,支持在集合首尾add , remove , deque 是double  ended queue 的缩写,意味双端队列,接口提供的方法有两种类型,如果失败,一种抛出异常,一种 ...

  8. Calico 网络通信原理揭秘

    Calico 是一个纯三层的数据中心网络方案,而且无缝集成像 OpenStack 这种 Iaas 云架构,能够提供可控的 VM.容器.裸机之间的 IP 通信.为什么说它是纯三层呢?因为所有的数据包都是 ...

  9. 【Android】java.lang.SecurityException: getDeviceId: Neither user 10065 nor current process has android.permission.READ_PHONE_STATE

    RT, 异常信息如下: java.lang.SecurityException: getDeviceId: Neither user 10065 nor current process has and ...

  10. Linux ln 命令

    Linux 中的文件分为 Hard Link 和 Symbolic Link 两种.Hard Link 文件又被称为硬链接文件.实体链接文件,Symbolic Link 文件则常被称为符号链接.软链接 ...