【死磕JVM】用Arthas排查JVM内存 真爽,java程序编译原理

下载地址: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[] args) throws Exception {

executor.setMaximumPoolSize(50);

for (;{

modelFit();

Thread.sleep(100);

}

}

/**

  • 对银行卡进行风险评估

*/

private static void modelFit(){

List taskList = getAllCardInfo();

//拿出每一个信息出来

taskList.forEach(info -> {

// do something

executor.scheduleWithFixedDelay(() -> {

//调用M方法

info.m();

}, 2, 3, TimeUnit.SECONDS);

});

}

private static List getAllCardInfo(){

List taskList = new ArrayList<>();

//每次查询100张卡出来

for (int i = 0; i < 100; i++) {

CardInfo ci = new CardInfo();

taskList.add(ci);

}

return taskList;

}

}

这个是上篇文章讲述的案例,感兴趣的可以了解一下。

首先我们需要使用javac 命令将Java文件进行编译javac FullGCTest.java进行编译,然后打印GC日志,进行风险监控打印GC日志:

java -Xms200M -Xmx200M -XX:+PrintGC FullGCTest

你可能感兴趣的:(程序员,面试,java,后端)