当我们系统遇到JVM或者内存溢出等问题的时候,如何对我们的程序进行有效的监控和排查,就发现了几个比较常用的工具,比如JDK自带的 jconsole、jvisualvm 还有一个最好用的工具—— jprofiler ,但是这个是收费的,或者除了很有钱的公司,一般很少人会用这个,还有一个就是我们今天的主角—— Arthas ,为什么今天会重点讲这个呢?
官网地址: arthas
GitHub地址: GitHub - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas
Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,提供了较为丰富的功能,主要还是他是免费里面的算是好用且功能比较强大的一个JVM排查的插件,在了解这个利器之后,发现还是挺好用的,而且支持的功能也比较全面,那么Arthas到底可以为我们做哪些事情呢?
以前,你碰到这些问题,解决的办法大多是,修改代码,重新上线。但是在大公司里,上线的流程是非常繁琐的,如果为了多加一行日志而重新发布版本,无疑是非常折腾人的。但是阿里巴巴开源的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 main(String[]