Как выяснить время процессора и ввода-вывода в среде 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
процесс учета вещей.
Тем не менее, вы, кажется, хотите узнать ресурсы, используемые службой для обработки отдельного запроса. Нет никакой возможности получить эту информацию, кроме как заставить сам сервис измерить и сообщить об этом.
Единственное, что вы можете получить извне (то есть от клиента) - это затраченное время для каждого запроса.