Question

We have a REST based service that is calling external API and get the response back from that API.

I was filing Capacity request here to make sure our boxes can handle the traffic when we host the service.

So the Capacity guys have asked me -

Any idea what is the estimated CPU and IO time for these calls?

Can anyone tell me in simple language what does these terms means? And what approach should I take to get the rough estimate about the calls?

Thanks for the help.

Update:-

Suppose if this 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();
        }
    }
}

Then how can I figure out CPU and IO times? And currently I am working in Unix Environment.

Was it helpful?

Solution

I believe that you are required to measure the CPU consumption and IO load caused by your application activity.

If you are on Unix-like system you can use

  1. top command for manual monitoring
  2. vmstat for automatic monitosring of whole machine
  3. ps with appropriate options to monitor specific process.

On Windows start from using Task Manager. You can also implement script in vbs or jscript that gets the same data using WMI.

If you need platform independent way implemented in java you can use JMX. System bean provides limited information at least about CPU consumption.

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