我有一个简单的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
有人能告诉我如何在Unix环境中找出这些调用的CPU
和IO time
吗?我只需粗略估计这些电话。
答案 0 :(得分:1)
如果“外部调用”是外部应用程序的执行(例如通过exec()
),您可以(理论上)通过将应用程序包装在time
中或使用{{1}来获取一些统计信息处理会计资料。
但是,您似乎想要找出服务用于处理单个请求的资源。除了通过让服务本身来衡量和报告它之外,没有办法获得这些信息。
您可以从外部(即从客户端)捕获的唯一内容是每个请求的已用时间。