Arthas - java服务监控神器

简介

Arthas 是Alibaba开源的Java诊断工具.

Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断.

为什么需要Arthas,它能做些什么?

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

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

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

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

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

6.如果系统CPU占用突然暴涨,怎么快速定位问题?

官方文档

https://alibaba.github.io/arthas/index.html

启动Arthas

下载jar包:wget https://alibaba.github.io/arthas/arthas-boot.jar

启动: java -jar arthas-boot.jar

Arthas命令

  • 注意事项、小技巧

    1. help可以查看所有命令名称及描述

    2. Arthas里每一个命令都有详细的帮助信息。可以用-h来查看。帮助信息里有EXAMPLES和WIKI链接。

    3. 可以通过 history 查看所有的历史命令

  • 查看当前系统的整体状况:

    dashboard 命令可以查看当前系统的实时数据面板。

    sysprop 可以打印所有的系统属性信息

    sysenv 命令可以获取到环境变量。和sysprop命令类似。

    jvm 命令会打印出JVM的各种详细信息

    classloader 用来查看当前所有的类加载器,-c 指定加载器hash

  • 热更新一条龙:

    jad 反编译代码,类或者方法 可用 > ,输出java文件,例如jad –-source-only > 文件路径/文件名.java,不加—source-only会带有类加载器信息不能编译成功.

    mc 用来编译代码,指定java文件路径进行编译,实验的执行成功率很低

    redefine 重新加载新编译好的class,指定class文件路径,成功率比较高一点,所以实际用时可以先用编辑器编译成class再用此命令加载到程序中

  • 上帝模式,随便看:

    thread 1 命令会打印线程ID 1的栈,不加1可打印出所有的线程,支持通道:thread | grep main

    sc 查找JVM里已加载的类

    sm 查找类的具体函数

    monitor 对方法进行监控,输出每段时间的调用情况统计

    trace 用于跟踪某个方法被调用,以及之后调用了哪些方法

    stack 用于查看某个方法的调用栈

    watch 命令可以查看函数的参数/返回值/异常信息等,watch 的第3个参数为返回值表达式,可以写Arthas中的内置对象,以下表格列出所有对象的不同含义:Arthas内置对象

    watch/stack/trace这个三个命令都支持 #cost 筛选时间

    ognl 可以动态执行代码,例如ognl '@java.lang.System@out.println("hello ognl")' OGNL特殊用法请参考:https://github.com/alibaba/arthas/issues/71

  • 退出Arthas

    exit 或者 quit 命令可以退出当前session,arthas server还在目标进程中运行。

    shutdown 可以完全退出Arthas

文章作者: 何同昊
文章链接: http://hetonghao.cn/2019/05/Arthas/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 何同昊 Blog
支付宝超级火箭🚀
微信超级火箭🚀