1.概述
Arthas(阿尔萨斯) 能为你做什么?
Arthas
是Alibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas
可以帮助你解决:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
- 怎么快速定位应用的热点,生成火焰图?
运行环境要求
Arthas
支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab
自动补全功能,进一步方便进行问题的定位和诊断。
2.快速安装
2.1 在线安装(Linux也可以这样安装)–推荐
- 下载jar包
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
- 2.运行
java -jar arthas-boot.jar
注:在运行第2条命令之前,先运行一个java进程在内存中,不然会出现找不到java进程的错误
注意:如果cmd是管理员权限运行arthas-boot
,那么IDEA启动也是要管理员运行程序
- 查看安装好的目录
C:\Users\admin\.arthas\lib\3.7.2\arthas
2.2. 离线安装
- 从Maven仓库下载全量包
curl -O -L https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.7.2/arthas-packaging-3.7.2-bin.zip
- 解压后,在文件夹里有
arthas-boot.jar
,直接用java -jar
的方式启动
java -jar arthas-boot.jar
注意:如果是Linux,可以使用以下命令解压到指定的arthas目录
unzip -d arthas arthas-packaging-3.7.2-bin.zip
发现解压后内容和在线按照内容一致
3. 卸载
3.1. 在 Linux/Unix/Mac 平台
删除下面文件:
rm -rf ~/.arthas/
rm -rf ~/logs/arthas
3.2. Windows平台
直接删除user home下面的.arthas
和logs/arthas
目录
- 安装主目录
- 日志记录目录
4. 快速入门:attach一个进程
步骤
1. 准备代码
以下是一个简单的Java程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。
代码的内容不用理会这不是现在关注的点。
public class MathGame {
private static Random random = new Random();
public int illegalArgumentCount = 0;
public List<Integer> primeFactors(int number) {
if (number < 2) {
++this.illegalArgumentCount;
throw new IllegalArgumentException("number is: " + number + ", need >= 2");
}
ArrayList<Integer> result = new ArrayList<Integer>();
int i = 2;
while (i <= number) {
if (number % i == 0) {
result.add(i);
number /= i;
i = 2;
continue;
}
++i;
}
return result;
}
public static void main(String[] args) throws InterruptedException {
MathGame game = new MathGame();
do {
game.run();
TimeUnit.SECONDS.sleep(1L);
System.out.println("在main函数中循环体内");
} while (true);
}
public void run() throws InterruptedException {
System.out.println("-- 计算中的函数 -- ");
try {
int number = random.nextInt() / 10000;
List<Integer> primeFactors = this.primeFactors(number);
MathGame.print(number, primeFactors);
}
catch (Exception e) {
System.out.println(String.format("illegalArgumentCount:%3d, ", this.illegalArgumentCount) + e.getMessage());
}
}
public static void print(int number, List<Integer> primeFactors) {
StringBuffer sb = new StringBuffer(number + "=");
for (int factor : primeFactors) {
sb.append(factor).append('*');
}
if (sb.charAt(sb.length() - 1) == '*') {
sb.deleteCharAt(sb.length() - 1);
}
System.out.println(sb);
}
}
注意:上面代码实际上就是math-game.jar
代码
2. 启动Demo
- jar包运行
java -jar arthas-demo.jar
- 或者idea运行步骤一代码
3. 启动arthas
- 因为arthas-demo.jar进程打开了一个窗口,所以另开一个命令窗口执行arthas-boot.jar
- 选择要粘附的进程:arthas-demo.jar
- 如果端口号被占用,也可以通过以下命令换成另一个端口号执行
java -jar arthas-boot.jar --telnet-port 9998 --http-port -1
4. 通过浏览器连接arthas
Arthas目前支持Web Console,用户在attach成功之后,可以直接访问:http://127.0.0.1:3658/。
可以填入IP,远程连接其它机器上的arthas。
© 版权声明
本站文章由不念博客原创,未经允许严禁转载!
THE END