【发布时间】:2013-03-15 19:21:13
【问题描述】:
我们有一个基于 REST 的服务,它调用外部 API 并从该 API 获取响应。
我在这里提交容量请求,以确保我们的盒子在我们托管服务时能够处理流量。
所以容量的家伙问我 -
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 时间呢?目前我在 Unix 环境中工作。
【问题讨论】:
-
打开 JDK 附带的 VisualVM,并分析 REST 调用。或者,您可以查看 YourKit,它是一个更快的 Java 分析器,并执行相同的操作。
-
感谢 pickypg 的建议。使用
visualvm或yourkit,我们可以找出 IO 和 CPU 时间吗?如果是,我如何在分析我们的 REST 调用后找出答案?意味着我应该研究什么组件来找出这些东西?感谢您的帮助。 -
您想告诉我们您不知道 CPU 时间是多少?
-
@lngo,我想弄清楚如何计算这些东西?
标签: java rest io visualvm cpu-time