0

Like the title states I am trying to benchmark a cycle and obtain cpu load and memory consumed. I have tried getProcessCpuLoad() with not much success. Note that I have tried it out with a thread sleep of 3 seconds before and after the cycle. With the memory tried the getMemoryPoolMXBeans, but not much success. Is there a Java library that can help me achieve this or a tool.

What can I do?

I don't have the latest version of the code with me, here is the one of the previous versions it is missing the sleep thread, though probably the entire code is wrong:

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryUsage;
import java.util.List;
import com.sun.management.OperatingSystemMXBean;

class HelloWorld {

  public static void main(String[] args) {

    System.out.println("result of getMemoryPoolMXBeans ");

    List < MemoryPoolMXBean > mpmxList = ManagementFactory.getMemoryPoolMXBeans();

    long BeforememoryUse = 0;

    for (MemoryPoolMXBean pl: mpmxList) {

      MemoryUsage mu = pl.getPeakUsage();

      BeforememoryUse += mu.getUsed();

    }

    //before 

    //  System.out.println(memoryUse); 

    long acc = 0;

    OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(

      OperatingSystemMXBean.class);

    // What % CPU load this current JVM is taking, from 0.0-1.0 

    double x = osBean.getProcessCpuLoad();

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

      acc++;

    }

    System.out.println(x + "\n");

    System.out.println(osBean.getProcessCpuLoad() + "\n");

    x = osBean.getProcessCpuLoad() - x;

    System.out.println("Cpu load for first statement= " + x);

    //after 

    long AftermemoryUse = 0;

    for (MemoryPoolMXBean pl: mpmxList) {

      MemoryUsage mu = pl.getPeakUsage();

      AftermemoryUse += mu.getUsed();

    }

    System.out.println("Memory used by the first statement" + (AftermemoryUse - BeforememoryUse));

    //second statement 

    // What % CPU load this current JVM is taking, from 0.0-1.0 

    BeforememoryUse = 0;

    for (MemoryPoolMXBean pl: mpmxList) {

      MemoryUsage mu = pl.getPeakUsage();

      BeforememoryUse += mu.getUsed();

    }

    //before 

    //  System.out.println(memoryUse); 

    acc = 0;

    x = osBean.getProcessCpuLoad();

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

      acc++;

    }

    //after 

    x = osBean.getProcessCpuLoad() - x;

    AftermemoryUse = 0;

    for (MemoryPoolMXBean pl: mpmxList) {

      MemoryUsage mu = pl.getPeakUsage();

      AftermemoryUse += mu.getUsed();

    }

    System.out.println("Cpu load for second statement= " + x);

    System.out.println("Memory used by the second statement" + (AftermemoryUse - BeforememoryUse));

  }
andrewJames
  • 19,570
  • 8
  • 19
  • 51

0 Answers0