当前位置: 首页 > news >正文

arthas简介

arthas简介

通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。

开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。

如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦 JVM 重新启动,它可能无法复现,如上文所述。

Arthas 旨在解决这些问题。开发人员可以在线解决生产问题。无需 JVM 重启,无需代码更改。 Arthas 作为观察者永远不会暂停正在运行的线程。

arthas有什么用

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

  5. 是否有一个全局视角来查看系统的运行状况?

  6. 有什么办法可以监控到 JVM 的实时运行状态?

  7. 怎么快速定位应用的热点,生成火焰图?

  8. 怎样直接从 JVM 内查找某个类的实例?

分享的目的

  1. arthas功能强大,可实时监控、动态追踪、内存分析。

arthas常用命令

基础命令

  • base64 :base64 编码转换,和 linux 里的 base64 命令类似

  • cat :打印文件内容,和 linux 里的 cat 命令类似

  • cls:清空当前屏幕区域

  • echo:打印参数,和 linux 里的 echo 命令类似

  • grep:匹配查找,和 linux 里的 grep 命令类似

  • help:查看命令帮助信息

  • history:打印命令历史

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

  • pwd:返回当前的工作目录,和 linux 命令类似

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

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

  • session:查看当前会话的信息

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

  • tee: 复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似

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

Arthas支持管道,后续的命令可以和上述的一些命令结合使用

JVM命令

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

  • getstatic:查看类的静态属性

  • heapdump:dump java heap, 类似 jmap 命令的 heap dump 功能

  • jvm:查看当前 JVM 的信息

    jvm启动时间、版本、jvm启动参数、类加载信息、GC信息、内存模型、内存使用、操作系统、线程、文件描述符

     

    jvm

    • logger:查看和修改 logger日志配置

      查看日志配置

       

      logger

      查看日志级别

       

      logger -c e73f9ac --name

      更改日志级别

       

      logger -c e73f9ac --name com.msxf.cloud.service.handler.instance.EcsInstanceConsoleHandler --level debug

      • mbean:查看 Mbean 的信息

      • memory:查看 JVM 的内存信息

         

        memory

        Full gc会触发 stw(stop the world)

          jdk1.8

          垃圾收集器:Parallel

        并行收集器组合 Parallel Scavenge + Parallel Old 年轻代采用复制算法,老年代采用标记-整理,在回收的同时还会对内存进行压缩。

          内存模型:

          jdk11

          垃圾收集器:G1

          内存模型:与jdk1.8类似

        • ognl:执行 ognl 表达式

        • perfcounter:查看当前 JVM 的 Perf Counter 信息

        • sysenv:查看 JVM 的环境变量

        • sysprop:查看和修改 JVM 的系统属性

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

          获取thread帮助

           

          thread -h

          查看最忙的3个线程,并打印堆栈

           

          thread -n 3

          指定采样时间间隔,每过1000毫秒采样,显示最繁忙的3个线程

           

          thread -i 1000 -n 3

          查看等待状态的线程(NEW, RUNNABLE, TIMED_WAITING, WAITING, BLOCKED, TERMINATED)

           

          thread --state WAITING

          查看死锁线程

           

          thread -b

          • vmoption:查看和修改 JVM 里诊断相关的 option

            查看Jvm参数,同时也能更新Jvm参数

             

            vmoption

            • vmtool:从 jvm 里查询对象,执行 forceGc

            类加载器命令

            • classloader:查看 classloader 的继承树,urls,类加载信息,使用 - classloader:去 getResource

            • dump:dump 已加载类的 byte code 到特定目录

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

              反编译出来的 java 代码可能会存在语法错误,内存编译可能报错

              • mc:内存编译器,内存编译.java文件为.class文件

                出现报错Memory compiler error, exception message: Compilation Error,可讲本地代码复制到目标环境进行内存编译

                 

                mc -c 

                • redefine:加载外部的.class文件,redefine 到 JVM 里

                  推荐使用 retransform 命令

                   

                  • retransform:加载外部的.class文件,retransform 到 JVM 里

                     

                    • sc:查看 JVM 已加载的类信息

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

                         

                        代码热更新

                        • 不允许新增加 field/method,一般用于添加日志

                        • 正在跑的函数,没有退出不能生效

                        1. jad 命令反编译,然后可以用其它编译器,比如 vim 来修改源码

                        2. mc 命令来内存编译修改过的代码

                        3. 用 retransform 命令加载新的字节码

                           

                          jad --source-only com.msxf.cloud.service.handler.instance.EcsInstanceConsoleHandler >> D://EcsInstanceConsoleHandler.java mc -c e73f9ac D://EcsInstanceConsoleHandler.java -d d:// retransform -c e73f9ac d://com/msxf/cloud/service/handler/instance/EcsInstanceConsoleHandler.class

                          监控命令

                          • monitor 方法执行监控

                             

                            monitor com.msxf.cloud.service.handler.instance.EcsInstanceConsoleHandler doRequest

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

                               

                              stack com.msxf.cloud.service.handler.instance.EcsInstanceConsoleHandler doRequest

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

                                获取console连接

                                 

                                trace com.msxf.cloud.service.handler.instance.EcsInstanceConsoleHandler doRequest

                                获取instance列表

                                 

                                trace com.msxf.cloud.service.handler.instance.EcsInstanceListHandler doRequest

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

                                   

                                  tt -t com.msxf.cloud.service.handler.instance.EcsInstanceConsoleHandler doRequest

                                  • watch 方法执行数据观测

                                     

                                    watch com.msxf.cloud.service.handler.instance.EcsInstanceConsoleHandler doRequest

                                    火焰图

                                    • profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。

                                    参考文档

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

                                    http://www.dtcms.com/a/504250.html

                                    相关文章:

                                  • 企业网站源码交易国产wordpress主题
                                  • 做网站要学什么c语言西安网站建设求职简历
                                  • 用阿里云服务器做自己购物网站wordpress多人聊天室
                                  • sm2025 模拟赛16 (2025.10.11)
                                  • 国内网站建设流程淘宝店标logo在线制作免费
                                  • 长沙市做网站公司排名广州做网站好的公司
                                  • SQL Server数据查询语句
                                  • 给领导发网站建设可行性方案邮件怎么写wordpress 获取用户邮箱
                                  • SQL NULL 函数详解
                                  • Linux进程信号(壹)_产生信号
                                  • 关于茶文化网站建设的背景做全屏的网站 一屛多高
                                  • GIS与农业 考公考编面试 几个参考题
                                  • 百度网站的安全建设方案在wordpress中rss订阅的步骤是什么?
                                  • win2008sr怎么用iis做网站东乡族网站建设
                                  • 织梦新闻门户网站模板wordpress 4.7.0 漏洞
                                  • Easyx图形库应用(用lua开发图形界面)
                                  • 点餐小程序模板seo入门视频
                                  • 做简报的网站企业为何选择网站推广外包?
                                  • 很多年前的51网站江门网站建设方案
                                  • 郑州关键词排名顾问如何优化搜索引擎的准确性
                                  • GD32待机和深度睡眠模式的区别
                                  • 微网站怎么做企业网页制作推广
                                  • C++篇(14)二叉树进阶算法题
                                  • 厦门网站制作维护建工网站
                                  • 无锡网站建设 无锡和诚科技电子商务网站建设有什么意义
                                  • python学习之多任务,简单线程的实现
                                  • 可以免费观看电影的网站创造一个平台要多少钱
                                  • 品牌网站怎么建设设计好网站
                                  • CMake下载和安装图解(附安装包,适合新手)
                                  • 广州网站建设费管理系统前端模板