Arthas

Java Agent入门

喜你入骨 提交于 2020-08-05 12:33:09
介绍 在JDK1.5以后,我们可以使用agent技术构建一个独立于应用程序的代理程序(即为Agent),用来协助监测、运行甚至替换其他JVM上的程序。使用它可以实现虚拟机级别的AOP功能。Agent分为两种,一种是在主程序之前运行的Agent,一种是在主程序之后运行的Agent(前者的升级版,1.6以后提供)。 使用 主程序运行之前的代理程序 创建代理类 public class MyPreMainAgent { //方法名和参数都是固定的 premain表示在主程序运行之前运行 public static void premain(String agentArgs, Instrumentation inst) { System.out.println("PreMain start"); System.out.println(agentArgs); System.out.println(inst); } } Instrumentation是java1.5新提供的类,它提供在运行时重新加载某个类的的class文件的api。 public interface Instrumentation { /** * 添加一个转换器Transformer,之后的所有的类加载都会被Transformer拦截。 * ClassFileTransformer类是一个接口,使用时需要实现它

线上应用调试利器 --Arthas

▼魔方 西西 提交于 2020-07-29 07:41:01
在之前的文章中,我介绍了使用 Btrace 工具进行线上代码的debug ( https://www.cnblogs.com/yougewe/p/10180483.html ),其大致原理就是通过字节码注入的方式进行辅助排查。   可以说,btrace 已经给我们的开发调试一带来了许多的方便,我们在上面做任何想要的调试!但是,明显, btrace 的使用还是有一定成本的,比如:安装应用,写调试脚本...   所以,今天我们再来看一大利器: arthas (阿尔萨斯) arthas 官网地址: https://alibaba.github.io/arthas/   arthas 的文档真的写得非常棒,可以说一看就会。 但是我还是想写一下一些自己的文档,毕竟我们往往只会用到其中皮毛功能而已。翻阅其所有文档也还是有点浪费了! 一、为什么要用 Arthas ?   其实,这个问题在前面已回答,而且,你为什么要用 btrace ? 同理! 具体理由如下: 可以很方便查到一类是从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 怀疑自己的代码未被部署到服务器,可以通过命令快速验证服务器上的代码就是本地的代码; 可以直接通过 arthas 进行线上debug, 查看方法返回值以确认问题所在; 可以很方便嵌入自己的debug代码,快速验证猜想; 操作完成后

开源应用诊断利器 Arthas GitHub Star 突破两万

好久不见. 提交于 2020-07-27 14:38:45
一、Arthas Star突破2万啦 https://github.com/alibaba/arthas 随着微服务的流行,应用更加轻量和开发效率不断提升,但是带来的困境是线上问题排查越来越复杂困难。传统的Java排查问题,需要重启应用再进行调试,但是重启应用之后现场会丢失,问题难以复现。 因此自2018年9月,阿里巴巴开源了久经考验,深受开发者喜爱的应用诊断利器Arthas。在阿里巴巴内部Arthas每年诊断数百万次,服务10000+应用,年节约9000人日。 Arthas通过创新的字节码织入技术,可以在应用无需重启时,查看调用上下文,高效排查问题;结合火焰图,可以直接定位热点,发现性能瓶颈;通过redefine技术,实现在线热更新代码;同时支持黑屏化和白屏化诊断,可以连接诊断大规模的集群。 在2019年2月时,我们做了Arthas Star破万里的回顾: 新的开始 | Arthas GitHub Star 破万后的回顾和展望 时间飞逝,转眼间一年过去了,Arthas的Star数突破2万了~ 下面来回顾Arthas去年的一些工作。 二、Arthas 过去一年的工作 在过去的一年里, Arthas 发布了8个release版本,做了大量的改进,下面列出一些重点: 增加 mbean/heapdump/vmoption/logger/stop/perfcounter/echo/tee

Java进程故障排查思路及步骤

吃可爱长大的小学妹 提交于 2020-05-02 14:27:49
目录 故障现象 原因分析 CPU使用率极低 CPU使用率持续极高 内存占用很高 解决思路及处理方式 常用工具 查看网络连接 线程堆栈日志分析 堆内存快照分析 线上问题诊断 故障现象 Java进程出现问题,通常表现出如下现象: 1.CPU使用率持续极高/低 2.内存占用持续极高,甚至出现OOM(例如:进程正常运行一段时间之后突然不再响应请求,但是进程依然存在) 3.Web应用响应时间很长/超时,甚至不响应直接出现502(使用nginx作为反向代理) 响应时间长、超时,甚至不响应,这是最直观的表现;而CPU使用率极高或极低,频繁出现Full GC甚至OOM,需要借助系统日志或者监控辅助发现。 原因分析 响应时间长、超时,甚至不响应,这是一个综合性的故障结果,可能并不单纯是应用程序本身的问题。 首先,需要排查网络连通性是否正常; 其次,如果后端还接了数据存储系统,除了排查应用程序本身的问题之外,还需要排查应用所依赖的第三方组件是否出现了性能瓶颈,这通常可以从应用程序日志中看到错误信息。 在直观的故障表象背后是对应的系统指标异常,排查思路如下。 CPU使用率极低 通常是线程Hang住了,或者是出现了死锁,通过线程堆栈日志可以进行定位。 CPU使用率持续极高 先使用jstack命令查看堆栈信息,结合线程堆栈信息分析可能的原因: 业务代码很忙,甚至出现了死循环,这个从线程堆栈日志中可以

线上问题排查常用命令

泄露秘密 提交于 2020-05-02 11:37:27
内存瓶颈 free free 是查看内存使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。 free -h -s 3 表示每隔三秒输出一次内存情况,命令如下 [1014154@cc69dd4c5-4tdb5 ~]$ free total used free shared buff/cache available Mem: 119623656 43052220 45611364 4313760 30960072 70574408 Swap: 0 0 0 [1014154@cc69dd4c5-4tdb5 ~]$ free -h -s 3 total used free shared buff/cache available Mem: 114G 41G 43G 4.1G 29G 67G Swap: 0B 0B 0B total used free shared buff/cache available Mem: 114G 41G 43G 4.1G 29G 67G Swap: 0B 0B 0B Mem :是内存的使用情况。 Swap :是交换空间的使用情况。 total : 系统总的可用物理内存和交换空间大小。 used : 已经被使用的物理内存和交换空间。 free : 还有多少物理内存和交换空间可用使用, 是真正尚未被使用的物理内存数量 。 shared

性能分析-java程序篇之案例-工具和方法

无人久伴 提交于 2020-05-01 04:28:03
1. 背景说明 线上服务响应时间超过40秒,登录服务器发现cpu将近100%了(如下图),针对此问题,本文说明排查过程、工具以定位具体的原因。 <img src="https://bingjava-blog.oss-cn-beijing.aliyuncs.com/site_imgs/perf01/性能分析01.png " width = "600" height = "200" alt="cpu使用率" align=center /> # 2. 分析排查过程 此类问题的排查,有两款神器可用,分别是async-profiler和arthas,async-profiler主要用于全局分析,通过此工具可以找到热点方法, 再用arthas对此热点方法进行详细的追踪,trace命令可以追踪方法的具体耗时,watch命令可以查看方法的出入参数,在结合源代码可以比较 方便定位到问题原因。下面记录排查过程: ## 2.1. 用async-profiler生成火焰图 到下载后,解压后如下所示: <img src="https://bingjava-blog.oss-cn-beijing.aliyuncs.com/site_imgs/perf01/java-perf-02.png" width = "600" height = "100" alt="async-profiler安装目录" align

arthas命令sc和sm视频演示

佐手、 提交于 2020-04-30 13:40:15
arthas是一个Java开源诊断神器。 今天分享两个命令: sc 和 sm 。 sc :“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息。 sm :“Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。 一个是查看加载类的信息,一个是查看加载类的方法信息,这两个方法都是侧重于查看信息,比较简单,测试过程中实用性不算很高,如果有权限去查看源码的话,几乎可以忽略掉这两个命令的。如果是没有源码的话,可以执行 jda 反编译命令即可查看源码(反编译后)信息。所以我对这两个命令的观点就是,了解,知道即可。 系列文章: arthas快速入门视频演示 arthas进阶thread命令视频演示 arthas命令jvm,sysprop,sysenv,vmoption视频演示 arthas命令logger动态修改日志级别--视频演示 arthas命令sc和sm 点击观看视频 本期不涉及源码,如果想练习这两个命令的,自己随便写一个就行,这里我就不分享我自己的Demo了。感兴趣的同学,后台回复 arthas 即可查看所有录制的arthas教程视频。 郑重声明 :“FunTester”首发,欢迎关注交流,禁止第三方转载。 技术类文章精选 Linux性能监控软件netdata中文汉化版 图解HTTP脑图

CloudBeaver docker镜像集成arthas

隐身守侯 提交于 2020-04-30 12:46:32
打算学习下CloudBeaver ,但是无奈CloudBeaver源码基于osgi,同时构建依赖的模块复杂,所以基于arthas 的火焰图功能梳理简单提供一个CloudBeaver 查询的处理流程 dockerfile 基于已经制作好的 FROM dalongrong / cloudbeaver: latest COPY -- from = hengyunabc / arthas: latest / opt / arthas / opt / arthas 环境准备 docker-compose 文件 version: "3" services: cloudbeaver: image: dalongrong / cloudbeaver: arthas build: . / volumes: - "./demos:/opt/demos" ports: - "80:8978" cap_add: - ALL 使用 启动 docker - compose up - d 进入容器生成火焰图 docker - compose exec cloudbeaver sh java - jar / opt / arthas / arthas - boot. jar profiler start - i 200 运行查询 多点几次 停止生成火焰图 profiler stop 效果 打开火焰图 说明

爱上Java诊断利器之Arthas

送分小仙女□ 提交于 2020-04-27 17:06:46
1. Arthas是什么? 摘自Arthas的Github介绍: <blockquote> <p>Arthas is a Java Diagnostic tool open sourced by Alibaba.</p> <p>Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.</p> </blockquote> 大意为:Arthas是阿里开源的一个Java诊断工具,可以帮助开发人员在不修改代码或重启服务器的情况下快速定位线上问题。 听起来确实是我们的程序员的一大福利。比如,我们就遇到一种情况,Spring Boot应用中有个cron定时任务为每天凌晨1点启动执行,但是测试起来很不方便,总不能每次修改cron时间来让QC测试吧?这样虽然是方便了测试妹子,但是却徒增了我们开发时间和迭代次数啊!!!那Arthas到底是否能够满足我们需求呢?Go on... 2. 开启Arthas之旅 2.1 安装Arthas 方式1:下载arthas-boot.jar包的方式 wget https://alibaba.github.io/arthas/arthas-boot.jar

初识阿里开源的本地Java进程监控调试工具arthas(阿尔萨斯)

懵懂的女人 提交于 2020-04-27 17:05:52
转载自:https://www.cnblogs.com/linhui0705/p/9795417.html 上个月,阿里开源了一个名为Arthas的监控工具。恰逢近期自己在写多线程处理业务,由此想到了一个问题。 如果在本机开发调试,IDE可以看到当前的活动线程,例如IntelliJ IDEA,线程是运行还是休眠,在Debugger→Threads可以看到。倘若代码写完提交,到测试环境上构建,要怎样才能看到测试服务器上的线程运行情况呢? 前面客套完了,教程GitHub上面也有,这里主要讲下个人在部署的过程和踩到的坑。仅供参考。 GitHub: https://github.com/alibaba/arthas Docs: https://alibaba.github.io/arthas/index.html 笔者用的是CentOS7裸机。看过教程,按照步骤执行命令: 1 curl -L https: //alibaba .github.io /arthas/install .sh | sh 下载了个名称为as.sh的脚本,执行脚本,发现: 1 2 3 [root@bogon arthas] # ./as.sh Arthas script version: 3.0.4 illegal ENV, please set $JAVA_HOME to JDK6+ 既然是Java监控