우리는 외부 API를 호출하고 해당 API에서 응답을 다시받는 REST 기반 서비스를 제공합니다.CPU 및 IO 시간을 찾는 방법은 무엇입니까?
우리가 서비스를 호스팅 할 때 우리 상자가 트래픽을 처리 할 수 있도록 여기에 용량 요청을 제출했습니다.
그래서 용량의 사람은 나에게 물었다 한 - 가Any idea what is the estimated CPU and IO time for these calls?
사람이이 용어의 의미를 무엇 simple language
에 말해 줄 수 있습니까? 통화에 대한 대략적인 견적을 얻기 위해 어떤 접근 방식을 취해야합니까?
도움 주셔서 감사합니다.
업데이트 : -이 내 프로그램입니다
한다고 가정합니다.
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();
}
}
}
그러면 CPU 및 IO 시간을 어떻게 알 수 있습니까? 그리고 현재 저는 유닉스 환경에서 일하고 있습니다.
JDK와 함께 제공되는 VisualVM을 열고 REST 호출을 프로파일 링하십시오. 또는 Java 용 프로파일 러인 훨씬 빠른 YourKit을 살펴보고 똑같은 작업을 수행 할 수도 있습니다. – pickypg
제안에 감사드립니다. 'visualvm' 또는'yourkit'을 사용하면 입출력과 CPU 시간을 모두 알아낼 수 있습니까? 그렇다면 REST 호출을 프로파일 링 한 후에 어떻게 알 수 있습니까? 이러한 것을 발견하기 위해 내가 조사해야 할 구성 요소를 의미합니까? 도와 주셔서 감사합니다. – AKIWEB
당신은 어떤 CPU 시간을 알지 못한다고 말하고 싶습니까? – Ingo