线上调试工具 jvm-sandbox使用
1 阿里在线分析诊断工具Arthas(阿尔萨斯)
参考: https://alibaba.github.io/arthas/
参考: https://github.com/alibaba/arthas/blob/master/README_CN.md
2 阿里在线分析诊断工具Jvm-Sandbox(JVM沙盒)
3 Arthas与Jvm-Sandbox比较
Arthas就像是一个剑冢,如果你希望得到一把宝剑就进去拿就好了! 它提供了各式各样的命令可以满足你的各项业务需求,上手成本较高。
Jvm-Sandbox就像是一个剑炉,其提供了Module的概念,每个Module都是一个AOP的实例,也就是一把剑,怎么样锻造取决于工匠,也就是你啦!它提供了模型,具体实现需要你自己编写,灵活性更高。上手成本相对较低
- 下面将通过日常碰到的需要添加日志的需求,对两个开源项目的进行体验。
4 添加日志案例
- 针对springboot-demo项目
- 使用 mvn clean install命令编译
- 上传springboot-demo-1.0-SNAPSHOT.jar包到服务器上
- 使用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项目
- 使用 mvn clean compile assembly:single 打包,上传至sandbox/sandbox-module目录下
- 回到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自定义切入方法名字)
- 切换到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使用的更多相关文章
- Java程序线上故障排查
目录 一.Linux 内存和cpu 网络 磁盘 /proc文件系统 二.JVM Java堆和垃圾收集器 gc日志分析 JVMTI介绍 Attach机制 java自带工具 三.三方工具 jprofile ...
- 记一次线上Curator使用过程JVM栈溢出解决
为了同学们看起来一目了,特按如下思路进行讲解. 1.出现的场景 2.分析及解决的过程 3.总结 最近公司要使用zookeeper做配置管理(后面简称ZK),然后自己就提前用虚拟机进行 ...
- JVM 线上故障排查基本操作
# 前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的.各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题.楼主同样也遇到过这些问题,那么,遇到这些问题该 ...
- 【jvm】来自于线上的fullGC分析
系统最近老年代的内存上升的比较快,三到四天会发生一波fullGC.于是开始对GC的情况做一波分析. 线上老年代2.7G,年轻带1.3G老年代上升较快,3天一波fullGC,并且fullGC会把内存回收 ...
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态?
https://alibaba.github.io/arthas/ Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决 ...
- 记一次线上事故的JVM内存学习
今天线上的hadoop集群崩溃了,现象是namenode一直在GC,长时间无法正常服务.最后运维大神各种倒腾内存,GC稳定后,服务正常.虽说全程在打酱油,但是也跟着学习不少的东西. 第一个问题:为什么 ...
- 大厂面试经:说一下你们线上JVM是如何优化的?
JVM(Java虚拟机)简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭.飞机的场景(面试)不懂JVM的你,会被 ...
- 一个线上JVM的CPU资源占用过高问题的排查
原文:https://www.iteye.com/blog/tyrion-2293369 上午线上某应用的一台JVM的CPU占比突然飙高到192%,并且一直下不来,导致监控一直告警,好久没处理这种问题 ...
- JVM 线上故障排查基本操作--内容问题排查
内存问题排查 说完了 CPU 的问题排查,再说说内存的排查,通常,内存的问题就是 GC 的问题,因为 Java 的内存由 GC 管理.有2种情况,一种是内存溢出了,一种是内存没有溢出,但 GC 不健康 ...
随机推荐
- MySql的数据库优化到底优啥了都??(1)
嘟嘟最不愿意做的就是翻招聘信息. 因为一翻招聘信息,工作经历你写低于两年都不好意思,前后端必须炉火纯青融汇贯通,各式框架必须如数家珍不写精通咋的你也得熟练熟练, 对了你是985吗?你是211吗??你不 ...
- 2019年7月20日 - LeetCode0002
https://leetcode-cn.com/problems/add-two-numbers/submissions/ 我的方法: /** * Definition for singly-link ...
- [小米OJ] 11. 构建短字符串
思路 排序后对两个字符串遍历 function solution(line) { var str = line.split(" "); var str1 = str[0].spli ...
- [leetcode] 80. Remove Duplicates from Sorted Array II (Medium)
排序数组去重题,保留重复两个次数以内的元素,不申请新的空间. 解法一: 因为已经排好序,所以出现重复的话只能是连续着,所以利用个变量存储出现次数,借此判断. Runtime: 20 ms, faste ...
- 使用 Spring Framework 时常犯的十大错误
Spring 可以说是最流行的 Java 框架之一,也是一只需要驯服的强大野兽.虽然它的基本概念相当容易掌握,但成为一名强大的 Spring 开发者仍需要很多时间和努力. 在本文中,我们将介绍 Spr ...
- laravel5.6 使用迁移创建表
laravel 使用迁移创建表 创建迁移文件 --table 和 --create 选项可以用于指定表名以及该迁移是否要创建一个新的数据表.这些选项只需要简单放在上述迁移命令后面并指定表名: php ...
- 正则与sed,grep,awk三剑客
系统登录顺序: /etc/profile /etc/profile.d/a.sh (a.sh自己建的) /root/.bash_profile /root/.bashrc /etc/bashrc /b ...
- 第二章 jQuery框架使用准备
window常用属性: History:有关客户访问过的URL的信息 Location: 有关当前url的信息 常用方法: Confirm()将弹出一个确认对话框 open()在页面上弹出一个新的浏览 ...
- activeMQ_helloworld(一)
一.activeMQ下载,直接在Linux上wget http://mirror.bit.edu.cn/apache//activemq/5.14.5/apache-activemq-5.14.5-b ...
- oracle一条语句插入多个值的方法
今天在实践过程中遇到一个问题, 我想往数据库插入多条数据时,使用了如下语句: insert into 表1 (字段1,字段2) values (1,2),(2,3),(3,4); 这条语句在mysql ...