java 诊断工具—— Arthas

版权声明:本文为博主原创文章,主要是为了交流学习,转载请注明出处。 https://blog.csdn.net/mxw2552261/article/details/83311449

程序员xx:我这个任务做完了,还有什么任务么?

经理:咱们这个项目有些地方速度有些慢,你来优化一下!


640?wx_fmt=jpeg


该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql!


接下来!今天的主角就登场了,阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 java 的问题进行诊断---Arthas(阿尔萨斯)


640?wx_fmt=png


这就是使用Arthas诊断出的效率问题 [滑稽] 是不是特别爽,有了这个工具,妈妈再也不用担心我优化问题了,哪里慢改哪里!


640?wx_fmt=jpeg


一、概述


 这个工具可以协助你做下面这些事情:


  • 这个类是从哪个 jar 包加载而来的?

  • 为什么会报各种类相关的 Exception?

  • 线上遇到问题无法 debug 好蛋疼,难道只能反复通过增加 System.out 或通过加日志再重新发布吗?

  • 线上的代码为什么没有执行到这里?是由于代码没有 commit?还是搞错了分支?

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

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

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


二、安装方式


1.1 window 安装方式

下载地址:http://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22com.taobao.arthas%22%20AND%20a%3A%22arthas-packaging%22

下载完成后,解压缩,如下图所示::


640?wx_fmt=png

在Download栏下载最新的 bin.zip 包,解压后在bin目录有 as.bat。此脚本暂时只接受一个参数 pid,即只能诊断本机上的 Java 进程。


启动命令为:


as.bat <pid>


注:我在 window 10 上面启动的时候遇到如下问题,


D:\download\arthas-packaging-3.0.4-bin>telnet
'telnet' 不是内部或外部命令,也不是可运行的程序
或批处理文件。


解决办法为:“控制面板” ——> “启动或关闭Windows功能” ——> 勾选 “Telnet 功能”


640?wx_fmt=png


1.2 Linux 安装方式


安装Arthas:


curl -L https://alibaba.github.io/arthas/install.sh | sh


启动Arthas:


./as.sh


成功启动后,会看到如下界面。


640?wx_fmt=png



三、常用命令



3.1 基础命令



  • help——查看命令帮助信息

  • cls——清空当前屏幕区域

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

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

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

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

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

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

jvm相关

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

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

  • jvm——查看当前 JVM 的信息

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

  • New! getstatic——查看类的静态属性

class/classloader相关

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

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

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

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

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

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

monitor/watch/trace相关

请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 shutdown 或将增强过的类执行 reset 命令。

  • monitor——方法执行监控        

  • watch——方法执行数据观测        

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

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

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

options

  • options——查看或设置Arthas全局开关

管道

Arthas支持使用管道对上述命令的结果进行进一步的处理,如sm org.apache.log4j.Logger | grep

  • grep——搜索满足条件的结果

  • plaintext——将命令的结果去除颜色

  • wc——按行统计输出结果

Web Console
通过websocket连接Arthas。

  • Web Console



其他特性


  • 异步命令支持

  • 执行结果存日志

  • 批处理的支持

  • ognl表达式的用法说明



3.2 使用示例

   

首先,在窗口中,输入 help 查看一下所有提供的可用命令(他的通信本质是通过  telnet 协议来通信的),如下图:


640?wx_fmt=png


这里主要说一下  watch ,这个命令对变量进行数据监测。


首先贴上我的测试代码:


package com.oct.tail;

import java.util.UUID;

/**
 * @Author Ryan
 * @Date 2018/9/18  9:58
 * @desc
 */

public class OtherTestCase {

    /**
     *
     * @return
     */

    public static String uuid(){
       return UUID.randomUUID().toString().replaceAll("-""");
    }

    public static void main(String[] args) {

        while(true){
            System.out.println("uuid = " + uuid());

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}


如下我做一个示例 ( 本人是基于 Window 10 , JDK 8 环境, Linux 雷同),(对于 watch 命令我假装不知道如何使用,立即输入  watch help 来看看会有什么玩意儿):


640?wx_fmt=png


在这里,我们针对方法  uuid() 返回值进行监测。监测结果如下:


640?wx_fmt=png


一目了然!是不是爽的起飞


4. 退出arthas


如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。


如果想完全退出arthas,可以执行shutdown命令。


当然了,Arthas不只有这些功能,更多的功能请大家浏览官方查看详细的用法以及命令


快上车!:


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


陛下...看完奏折,点个赞再走吧!


推荐阅读


技术:jenkins和docker实现自动化构建部署

技术:设计图都不会画,还想做”架构师“?

技术:玩转linux 这些命令就够了 

技术:Kafka、RabbitMQ、RocketMQ等消息中间件的对比

技术:玩转linux 这些命令就够了

技术:30分钟如何学会使用Shiro 


工具:如何通过技术手段 “干掉” 视频APP里讨厌广告?

工具:通过技术手段 “干掉” 视频APP里讨厌的广告之(腾讯视频)


博主11年java开发经验,现从事智能语音工作的研发,关注微信公众号与博主进行技术交流!更过干货资源等你来拿!

640?wx_fmt=jpeg


640?wx_fmt=png

猜你喜欢

转载自blog.csdn.net/mxw2552261/article/details/83311449