Question

I have a simple Multithreaded program that is calling an External API and get the response back from that API. I am using RestTemplate.

Problem Statement:-

I am trying to find out

What is the estimated CPU and IO time for these calls?

I am working in Ubuntu.

Below is my program-

public class RestLnPTest {

    private final static Logger LOG = Logger.getLogger(NokiaLnPTest.class.getName());
    private static int noOfThreads = 10;

    public static void main(String[] args) {

        ExecutorService service = Executors.newFixedThreadPool(noOfThreads);

        try {

            for (int i = 0; i < 100 * noOfThreads; i++) {
                service.submit(new ThreadTask());
            }

            service.shutdown();
            service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);

        } catch (InterruptedException e) {

        } catch (Exception e) {

        } finally {
            logHistogramInfo();
        }
    }

    private static void logHistogramInfo() {

     System.out.println(ThreadTask.lookupHistogram);

    }
}

class ThreadTask implements Runnable {

    public static ConcurrentHashMap<Long, AtomicLong> lookupHistogram = new ConcurrentHashMap<Long, AtomicLong>();
    private static final String URL = "SOME_URL";

    @Override
    public void run() {

        RestTemplate restTemplate = new RestTemplate();

        long start = System.nanoTime();

        String result = restTemplate.getForObject(URL, String.class);

        long end = System.nanoTime() - start;

        final AtomicLong before = lookupHistogram.putIfAbsent(end / 1000000, new AtomicLong(1L));

        if (before != null) {
            before.incrementAndGet();
        }
    }
}

I am running the above program from Command Line in Ubuntu as-

java - jar REST.jar

Can anyone tell me in step by step how to figure it out CPU and IO time for these calls in Unix environment?. I needed just rough estimate of these calls.

Was it helpful?

Solution

If the "external calls" were executions of an external application (e.g. via exec()) you could (in theory) get some stats by either wrapping the application in time or using the ac process accounting stuff.

However, you seem to want to find out the resources used by a service to process individual request. There's no way to get that information, other than by getting the service itself to measure and report it.

The only thing you can capture from the outside (i.e. from the client) is the elapsed time for each request.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top