如何通过JMC查看SE和spring应用的热门类和方法

时间:2019-06-10 12:20:31

标签: java jmeter jvm profiling jmc

我想通过JMC(Java任务控制)查看热门的类/方法(它们创建了多少类,它们的大小以及它们为方法调用/执行的时间)。首先,我做了一个se和一个spring应用来深入了解这个主题。

1)为此,我创建了两个简单的应用程序:SE https://github.com/Arxemond777/java_jmc_profiling和spring-boot https://github.com/Arxemond777/spring_jmc_jmeter_profiling
2 *)对于spring app,我通过@Sheduler(cron)和Jmeter(https://github.com/Arxemond777/spring_jmc_jmeter_profiling/blob/master/src/main/resources/jmeter/Test%20Plan.jmx)jmeter保存的配置生成负载
3)我使用jms 5.5(/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/jmc)和6.0(/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home / bin / jmc)。 我尝试默认运行“开始飞行记录”,并使用不同的设置来测量精度,然后检查选项卡(jmc 5.5)“代码”->“概述”“代码”->“热门方法”和(jmc 6.0)“概述” ->“方法分析”。
4.1)对于我的se应用程序,我有时(以记录时间1或2分钟)看到CountSizeOfHashMap#a()方法的调用方式,但有时却看不到以下信息,例如跟随屏幕https://yadi.sk/d/8xtFmga9Ufhp2Q,但我从未见过如何调用CountSizeOfHashMap#b()。
4.2)对于我的spring应用程序,我从未见过如何调用Cron#scheduleFixedDelayTask()https://github.com/Arxemond777/spring_jmc_jmeter_profiling/blob/master/src/main/java/example/cron/Cron.java 或GreetingController#greeting()/ GreetingController#delay()/ GreetingController#withoutDelay() https://github.com/Arxemond777/spring_jmc_jmeter_profiling/blob/master/src/main/java/example/controller/GreetingController.java 我还从未见过https://github.com/Arxemond777/spring_jmc_jmeter_profiling/blob/master/src/main/java/example/dto/MyClass.java的一个“飞行记录”记录周期中创建了多少个实例 我仅看到如何调用jdk方法,例如:j.u.HashMap.put()ets 以及如何创建jdk类,例如:j.u.TimerThread ets

SE应用代码https://github.com/Arxemond777/java_jmc_profiling

public class CountSizeOfHashMap {

    static Map<Character, Long> map = new HashMap<>();

    public static void main(String[] args) {
        a();
    }

    private static void a() {
        for (long i = 0; i < 8_000L; i++) {
            map.put((char)i, i + b());
        }

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        a();
    }

    private static long b() {
        final long l = new Random().nextInt(11);
        map.put('a', l);
        return l;
    }
}

春季应用https://github.com/Arxemond777/spring_jmc_jmeter_profiling GreetingController.java

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();
    private final String URL = "http://arxemond.ru";
    private final List<MyClass> myClasses = new ArrayList<>();

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                String.format(template, name));
    }

    @RequestMapping("/delay")
    public String delay() throws InterruptedException {
        final int delay = new Random().nextInt(3000 - 500 + 1) + 500;
        System.out.printf("delay: %d ms" + System.lineSeparator(), delay);
        Thread.sleep(delay);

        myClasses.add(new MyClass(String.valueOf(delay)));

        return restTemplate.getForEntity(URL, String.class).getBody();
    }

    @RequestMapping("/without-delay")
    public String withoutDelay() {
        return restTemplate.getForEntity(URL, String.class).getBody();
    }
}

Cron.java

@Service
public class Cron {
    @Scheduled(fixedDelay = 500)
    public void scheduleFixedDelayTask() { // 120
        System.err.println("Fixed delay task - " + System.currentTimeMillis() / 1000);
    }
}

MyClass.java

public class MyClass {
    private final String name;

    public MyClass(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

预期:

*)我想查看我的se和spring应用程序创建了多少个类,它们的大小以及调用的方法的数量以及方法的执行时间。

实际:

*)对于我的SE应用程序,我有时会调用CountSizeOfHashMap#a()方法,但实际上它要比实际调用的要少,而且我从未见过如何调用CountSizeOfHashMap#b()方法。

*)我从未见过spring方法的调用次数(执行次数)以及执行时间。以及如何从我的数据包(多少个实例)中创建类以及它们的大小。

0 个答案:

没有答案