程序员xx:我这个任务做完了,还有什么任务么?
经理:咱们这个项目有些地方速度有些慢,你来优化一下!
该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql!
接下来!今天的主角就登场了,阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 java 的问题进行诊断---Arthas(阿尔萨斯)
这就是使用Arthas诊断出的效率问题 [滑稽] 是不是特别爽,有了这个工具,妈妈再也不用担心我优化问题了,哪里慢改哪里!
这个工具可以协助你做下面这些事情:
二、安装方式
1.1 window 安装方式
下载地址:http://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22com.taobao.arthas%22%20AND%20a%3A%22arthas-packaging%22
下载完成后,解压缩,如下图所示::
在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 功能”
安装Arthas:
curl -L https://alibaba.github.io/arthas/install.sh | sh
启动Arthas:
./as.sh
成功启动后,会看到如下界面。
jvm相关
class/classloader相关
monitor/watch/trace相关
请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 shutdown 或将增强过的类执行 reset 命令。
options
管道
Arthas支持使用管道对上述命令的结果进行进一步的处理,如sm org.apache.log4j.Logger | grep
Web Console 通过websocket连接Arthas。
其他特性
首先,在窗口中,输入 help 查看一下所有提供的可用命令(他的通信本质是通过 telnet 协议来通信的),如下图:
这里主要说一下 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 来看看会有什么玩意儿):
在这里,我们针对方法 uuid() 返回值进行监测。监测结果如下:
一目了然!是不是爽的起飞
如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出arthas,可以执行shutdown命令。
当然了,Arthas不只有这些功能,更多的功能请大家浏览官方查看详细的用法以及命令
快上车!:
https://alibaba.github.io/arthas/sm.html
陛下...看完奏折,点个赞再走吧!