皮皮网

【农场源码 易语言】【易语言微信活动源码】【商之翼 翼商城 源码】arthas源码

2024-11-20 01:54:06 来源:rachel james 源码

1.Java 诊断工具 Arthas 常见命令(超详细实战教程)
2.arthas常用命令
3.Arthas使用指南
4.Arthas 源码阅读
5.好玩的源码开源项目推荐
6.Java问题解决录: 运行时抛出NoSuchMethodError / NoSuchFieldError异常

arthas源码

Java 诊断工具 Arthas 常见命令(超详细实战教程)

       在云原生环境中,微服务众多,源码一个高效的源码诊断工具Arthas对于问题排查至关重要。Arthas,源码由阿里开源,源码深受开发者喜爱,源码农场源码 易语言其在线诊断功能无需重启服务,源码支持动态追踪Java代码和实时监控JVM状态,源码适用于JDK 6+平台,源码采用命令行交互模式,源码具备Tab补全功能,源码方便定位问题。源码

       Arthas官方定位为Java应用诊断神器,源码GitHub上已有超过.4K颗星的源码赞誉。它的源码功能丰富,如查看线程、内存、GC状态,分析入参/返回值/异常,快速定位热点,生成火焰图等,对解决疑难问题大有裨益。本文将深入介绍Arthas的常见命令应用。

       启动示例与诊断工具

       首先,通过下载并运行arthas-demo.jar启动案例程序,然后启动诊断工具Arthas-boot.jar。

       诊断工具操作流程

       启动Arthas-boot后,它会列出所有Java进程,用户选择需要诊断的进程,比如输入1并回车。成功Attach后,会显示Arthas LOGO,易语言微信活动源码并通过输入help获取命令帮助。

       实时数据监控与系统操作

       通过dashboard命令,你可以查看CPU、内存、GC和运行环境等实时数据。只需输入q或Ctrl+C退出dashboard。

       具体命令功能

       - thread命令:打印线程ID及其栈信息,如thread 1 | grep 'main('。

       - sc和sm命令:sc用于查看已加载类,sm用于查找类的具体函数,支持-d参数详细查看。

       - jad命令:用于反编译代码,可指定源代码输出。

       - ognl命令:动态执行代码,支持返回值展开和多行表达式。

       - watch命令:查看函数参数、返回值、异常信息,支持条件表达式和异常捕获。

       - sysprop和jvm命令:获取系统和JVM信息。

       - reset命令:重置增强类,清除Arthas的字节码增强。

       实操案例与异常排查

       遇到函数调用异常时,Arthas能帮助查看详细请求参数和堆栈。例如,通过watch命令追踪UserController的参数和异常。

       其他功能

       - 修改应用Logger Level,可以使用ognl获取和设置。

       - 热更新代码,如修改UserController逻辑。

       - 利用tt命令获取Spring Context并调用函数。商之翼 翼商城 源码

       - 跟踪HTTP请求过滤器,找出 Unauthorized的源头。

       每个命令都有详细的文档支持,可根据具体需求灵活运用。更多高级功能如查看线程、CPU使用率和调用栈,请参考相关教程以充分利用Arthas的强大功能。

arthas常用命令

        执行成功后, arthas提供了一种命令行方式的交互方式, arthas会检测当前服务器上的Javai程,并将进程列表展示出来,用户输入对应的编号(1.2.3.4.)进行选择,然后回车。

        方式1:

        方式2:运行时选择Java进程PID

        quit

        通过图中的thread区域可以看出当前占用cpu最高的两个是jvm内部线程

        Java 8之后支持获取JVM内部线程CPU时间,这些线程只有名称和CPU时间,没有ID及状态等信息(显示ID为-1)。 通过内部线程可以观测到JVM活动,如GC、JIT编译等占用CPU情况,方便了解JVM整体运行状况。

        JVM内部线程包括下面几种:

        注意:线程栈为第二采样结束时获取,不能表明采样间隔时间内该线程都是在处理相同的任务。建议间隔时间不要太长,可能间隔时间越大越不准确。 可以根据具体情况尝试指定不同的间隔时间,观察输出结果。

        默认按照CPU增量时间降序排列,只显示第一页数据,默认按照CPU增量时间降序排列。

        显示所有匹配线程信息,有时需要获取全部JVM的线程数据进行分析。

        thread -b, 找出当前阻塞其他线程的线程

        找到阻塞其他线程的线程,即当前占用锁的线程

        注意, 目前只支持找出synchronized关键字阻塞住的线程, 如果是 java.util.concurrent.Lock , 目前还不支持。

        thread -i : 统计最近ms内的线程CPU时间。

        thread -n 3 -i : 列出ms内最忙的3个线程栈

        “Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,这个命令支持的参数有 [d] 、 [E] 、 [f] 和 [x:] 。

        “Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。

        sm 命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到。

        sc看类信息,sm可以看类的方法信息,两者正好可以结合者来看。

        java -jar arthas-boot.jar --tunnel-server ws://...:/ws

        help 查看命令帮助信息

        cls 清空当前屏幕区域

        session 查看当前会话的信息

        reset 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类

        version 输出当前目标 Java 进程所加载的 Arthas 版本号

        history 打印命令历史

        quit 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响

        stop 关闭 Arthas 服务端,所有 Arthas 客户端全部退出

        keymap Arthas快捷键列表及自定义快捷键

        dashboard 当前系统的实时数据面板

        thread 查看当前 JVM 的线程堆栈信息

        watch 方法执行数据观测

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

        stack 输出当前方法被调用的调用路径

        tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

        monitor 方法执行监控

        jvm 查看当前 JVM 信息

        vmoption 查看,更新 JVM 诊断相关的参数

        sc 查看 JVM 已加载的类信息

        sm 查看已加载类的方法信息

        jad 反编译指定已加载类的源码

        classloader 查看 classloader 的继承树,urls,类加载信息

        heapdump 类似 jmap 命令的 heap dump 功能

Arthas使用指南

       Arthas是一个强大的Java工具,提供了丰富的功能以帮助开发者诊断和调试。它的命令行工具集包括dashboard、thread、watch、trace、monitor等,覆盖了从线程监控、方法调用跟踪到性能分析和代码热部署的各个环节。下面是一些关键命令的简要介绍:

       - **dashboard**:实时展示当前系统中线程的详细信息,包括线程ID、名称、优先级、状态、CPU使用率和运行时间等。

       - **thread**:查看和分析JVM中所有线程,支持筛选高CPU消耗线程,查找死锁,以及查看线程池信息。

       - **watch**:实时观测方法的输入输出和异常,帮助你追踪执行过程中的细节。

       - **trace**:追踪方法调用路径,记录每个节点的耗时,便于性能瓶颈定位。java音乐网站源码

       - **monitor**:定期统计指定方法的执行情况,便于监控和优化。

       - **jad**:反编译已加载类的源码,对代码进行深入分析。

       - **stack**:查看方法的调用链,帮助理解调用关系。

       - **tt**:方法调用的时空隧道,记录每次调用的参数和返回值,便于长期观测和回溯。

       - **retransform** 和 **redefine**:热部署功能,允许动态修改类的代码,但需注意修改限制和注意事项。

       - **quit** 和 **shutdown**:分别用于退出当前客户端和关闭Arthas服务器,其中retransform的结果会保留。

       使用Arthas时,请确保理解每个命令的用途,并根据需要灵活运用,以提高开发效率。

Arthas 源码阅读

       Arthas源码阅读的核心逻辑主要集中在arthas-agent的启动流程中,首先通过java -jar arthas-core.jar执行,然后Bootstrap获取Instrumentation并进行初始化。Server启动后,通过TelnetClient发送命令到Server,由CommandResolver解析并执行,如thread命令的执行过程。

       在启动阶段,用户输入会被TelnetConsole接收并由ShellServer解析,通过TermServerTermHandler处理,包括常用的HttpTelnetTermServer和HttpTermServer(基于Netty)。例如,ThreadCommand的北京源码资本有限公司process方法负责处理thread命令的具体逻辑。

       获取JVM信息通过JvmCommand,Watch接口通过EnhancerCommand实现,利用字节码增强技术(如EnhanceWatchAdviceListener)收集方法运行时信息。Profiler逻辑则涉及一个二进制工具,具体使用方法可参考相关文档。

       在实际问题解决上,Arthas提供了两种操作方式:一是通过命令行选项--command指定多条命令,适用于非持续监控场景;二是利用HTTP API进行远程控制,如Arthas Tunnel,适用于需要动态控制进程的场景,如管理多个Agent。

       此外,深入理解Consumer的completionHandler,如Termd Demo中的ReadLine部分,有助于更好地掌握Arthas的交互机制。

好玩的开源项目推荐

       欢迎光临,今日为您推荐一系列趣味十足的开源项目,让工作之余也能享受科技带来的乐趣。

       项目一:Spleeter。一款音轨分离软件,只需输入一段命令,即可轻松分离音乐中的人声与乐器声,支持多种常见音频格式,由 Python 语言编写,并利用 TensorFlow 进行模型训练。

       项目地址:github.com/deezer/spleeter...

       项目二:FlutterBoost。由阿里系闲鱼团队开源的框架,提供快速便捷的原生应用与 Flutter 混合集成方案,最新版本为 v3.0-preview,目前仍持续维护中。

       项目地址:github.com/alibaba/flutterboost...

       项目三:Orika。一个基于字节码技术栈实现的高性能 Java 对象映射框架,以其简单易用、高效的特点成为众多映射框架中的佼佼者。

       项目地址:github.com/orika-mapper...

       项目四:hotkey。京东 APP 后台热数据探测开源框架,经过多次高压压测和京东 大促的考验,精确探测热门商品并快速推送到服务端,大幅减轻数据层查询压力,提升应用性能。

       项目地址:gitee.com/jd-platform-hotkey...

       项目五:PaddleOCR。基于飞桨的 OCR 工具库,提供超轻量级中文 OCR,支持中英文数字组合识别、竖排文本识别、长文本识别,同时包含多种文本检测、识别的训练算法。

       项目地址:gitee.com/paddlepaddle/...

       项目六:XXL-JOB。一个轻量级分布式任务调度平台,设计目标是开发迅速、学习简单、轻量级、易扩展,现已开放源代码,并在多家公司线上产品线中应用。

       项目地址:github.com/xuxueli/xxl-job...

       项目七:CIM。基于 Netty 框架的即时消息推送系统,支持多端接入,适用于移动应用、物联网、智能家居等领域。

       项目地址:gitee.com/farsunset/cim...

       项目八:DevSidecar。为开发者提供辅助的边车工具,通过本地代理将 HTTP 请求代理到加速通道,解决网站和库无法访问或访问速度慢的问题。

       项目地址:github.com/docmirror/devsidecar...

       项目九:Jsoup。一款 Java 的 HTML 解析器,可直接解析 URL 或 HTML 文本,提供简单易用的 API,支持 DOM、CSS 以及类似 jQuery 的操作方法。

       项目地址:github.com/jhy/jsoup...

       项目十:Knife4j。为 Java MVC 框架集成 Swagger 生成 API 文档的增强解决方案,前身是 swagger-bootstrap-ui,取名 knife4j,旨在小巧、轻量、功能强大。

       项目地址:github.com/xiaoymin/swagger-bootstrap-ui...

       项目十一:Arthas。阿里巴巴开源的 Java 诊断工具,支持 JDK 6+,适用于 Linux/Mac/Windows,提供命令行交互模式与丰富的 Tab 自动补全功能。

       项目地址:github.com/alibaba/arthas...

       项目十二:El-admin。基于 Spring Boot、Jpa、Spring Security、redis、Vue 的前后端分离的开源后台管理系统,采用 RBAC 权限控制方式,支持数据字典、数据权限管理与代码生成。

       项目地址:github.com/elunez/eladmin...

       项目十三:Halo。使用 Java 开发的开源博客系统,基于 Spring Boot 框架,通过一行命令即可完成安装。

       项目地址:github.com/halo-dev/halo...

       项目十四:Hutool。一个功能全面的 Java 工具类库,提供静态方法封装,降低学习成本,提高工作效率。

       项目地址:github.com/dromara/hutool...

       希望以上推荐能满足您的需求,若感兴趣,不妨前往 GitHub 上探索更多好玩的开源项目,每日都有更新!

Java问题解决录: 运行时抛出NoSuchMethodError / NoSuchFieldError异常

       现象描述

       在IDE中编译运行程序无异常,但在打包成可运行的jar包(如Spring Boot jar包)后,程序运行时会抛出NoSuchMethodError或NoSuchFieldError异常。

       问题定位步骤

       通过增加JVM参数如-verbose:class、-XX:+TraceClassLoading或-Xlog:class+load=debug来查看类的加载情况。使用Arthas工具的jad命令可以查看已加载类的源码,从而查看类的加载路径、jar包版本号及使用的类加载器。

       问题分类

       问题可能源自三个主要方面:

       1. **重复类定义**:在同包中或不同jar包中定义了同名类,导致类加载器加载了错误的类。这类问题通常发生在第三方jar包与项目自身的jar包中。

       2. **依赖版本冲突**:maven的传递依赖特性可能导致多个版本的类被加载,最终生效的版本可能导致NoSuchMethodError或NoSuchFieldError异常。根据maven的广度优先遍历算法,高版本或低版本的类可能覆盖了其他版本的类。

       3. **反射机制错误**:使用反射时,如果类定义错误或传递参数错误,也可能导致运行时异常。目前尚无自动检测这类错误的工具。

       编译期发现方法

       对于使用maven的项目,可以配置额外的enforcer-rules(如Ban Duplicate Classes规则)来在编译期间强制发现重复类定义的问题。对于使用Android Studio(Gradle工具)的项目,这类编译错误提示较为常见。

       总结

       通过增加JVM参数、使用Arthas工具、分析maven依赖树和代码中的反射使用情况,可以有效地定位和解决NoSuchMethodError或NoSuchFieldError异常。确保类定义的唯一性、避免依赖版本冲突以及正确使用反射机制是预防此类异常的关键。

实战Arthas:常见命令与最佳实践

       本文深入介绍实战 Arthas 的常见命令与最佳实践,帮助开发者更高效地进行 Java 应用程序的诊断和调优。推荐关注 Arthas 官方文档与 Arthas Idea 插件,以加速学习与问题排查。以下是常用命令详解与使用技巧:

       类命令:getstatic 用于查看类的静态属性,推荐使用 ognl 命令以获取更灵活的交互方式。

       jad 命令反编译指定已加载类的源码,适用于快速验证代码是否生效。retransform 命令则用于加载外部 .class 文件,重新编译已有类,但需谨慎使用,以免影响程序稳定性。

       监测排查命令包括:monitor 实现方法执行监控,stack 输出当前方法调用路径,thread 显示当前线程信息,trace 显示方法内部调用路径及耗时,trace 命令尤其适用于性能问题定位,而 tt 命令则记录方法调用的详细信息。

       JVM 监控命令有:heapdump 生成堆转储文件,jfr 集成 Java Flight Recorder 收集诊断数据,memory 查看 JVM 内存信息,dashboard 实时显示系统数据,classloader 列出所有 classloader 信息,logger 查看 logger 信息,sc 查看已加载类,mbean 显示 MBean 信息,profiler 生成应用热点火焰图,vmoption 查看和更新 VM 参数,vmtool 利用 JVMTI 接口实现内存对象查询和强制 GC。

       特殊命令中,-v 用于查看匹配表达式的执行结果,ognl 命令灵活执行 OGNL 表达式,options 为全局开关,help 查看命令帮助,history 列出命令历史,cls 清屏,quit 退出 Arthas。

       快捷键及实用功能:使用 OGNL 语言简化表达式过滤,支持管道命令进行进一步筛选,后台异步执行检测命令,实现问题排查的灵活性。

       Arthas 强大的功能和灵活性为开发者提供了强大的工具,帮助提高诊断和调优效率。探索更多 Arthas 的用法与功能,将有助于提升开发工作的便利性和效率。