Arthas是啥
当我们系统遇到JVM或者内存溢出等问题的时候,如何对我们的程序进行有效的监控和排查,就发现了几个比较常用的工具,比如JDK自带的 jconsole、jvisualvm
还有一个最好用的工具—— jprofiler
,但是这个是收费的,或者除了很有钱的公司,一般很少人会用这个,还有一个就是我们今天的主角—— Arthas ,为什么今天会重点讲这个呢?
官网地址: arthas
GitHub地址: GitHub - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas
Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,提供了较为丰富的功能,主要还是他是免费里面的算是好用且功能比较强大的一个JVM排查的插件,在了解这个利器之后,发现还是挺好用的,而且支持的功能也比较全面,那么Arthas到底可以为我们做哪些事情呢?
- 提供性能看板,包括线程、cpu、内存等信息,并且会定时的刷新。
- 根据各种条件查看线程快照。找出cpu占用率最高的n个线程
- 输出jvm的各种信息,如gc算法、jdk版本、ClassPath等
- 遇到问题无法在线上 debug,热部署加日志直接替换
- 查看某个类的静态属性,也可以通过ognl语法执行一些语句
- 查看已加载的类的详细信息,这个类从哪个jar包加载的,查看类的方法的信息
- dump 类的字节码到指定目录
- 直接反编译指定的类
- 快速定位应用的热点,生成火焰图
- 可以监控到JVM的实时运行状态
以前,你碰到这些问题,解决的办法大多是,修改代码,重新上线。但是在大公司里,上线的流程是非常繁琐的,如果为了多加一行日志而重新发布版本,无疑是非常折腾人的。但是阿里巴巴开源的Arthas
有了更为优雅的线上调试方法。
Arthas 支持JDK6,同时可以在 Linux/Mac/Windows
上运行,自动Tab 补全功能,更方便我们定位问题和诊断
下载地址: https://arthas.gitee.io/download.html
你可以下载zip的包我下载的是arthas-packaging-3.5.0-bin.zip
或者通过命令去下载
wget https://alibaba.github.io/arthas/arthas-boot.jar
使用手册
1. 快速启动
当我们下载好之后,我们直接通过命令启动就可以 java -jar arthas-boot.jar
,但是在此之前我们需要通过检测的代码来挂靠到Arthas上面
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class FullGCTest {
//模拟银行卡的类
private static class CardInfo {
//小农的银行卡信息记录
BigDecimal price = new BigDecimal(10000000.0);
String name = "牧小农";
int age = 18;
Date birthdate = new Date();
public void m() {}
}
//线程池 定时线程池
//50个,然后设置 拒绝策略
private static ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(50,
new ThreadPoolExecutor.DiscardOldestPolicy());
public static void