Как выяснить время процессора и ввода-вывода в среде Unix

У меня простой Multithreaded program это зовет External API и получить ответ от этого API. я использую RestTemplate,

Постановка задачи:-

Я пытаюсь выяснить

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

Я работаю в Ubuntu.

Ниже моя программа

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

Я запускаю вышеуказанную программу из командной строки в Ubuntu, как

java - jar REST.jar

Может кто-нибудь пошагово подскажет как это выяснить CPU а также IO time для этих звонков в среде Unix? Мне нужна была только приблизительная оценка этих звонков.

1 ответ

Решение

Если "внешние вызовы" были исполнением внешнего приложения (например, через exec()) вы можете (теоретически) получить некоторую статистику, обернув приложение в time или используя ac процесс учета вещей.

Тем не менее, вы, кажется, хотите узнать ресурсы, используемые службой для обработки отдельного запроса. Нет никакой возможности получить эту информацию, кроме как заставить сам сервис измерить и сообщить об этом.

Единственное, что вы можете получить извне (то есть от клиента) - это затраченное время для каждого запроса.

Другие вопросы по тегам