我们有一个基于REST的服务,它调用外部API并从该API获取响应.
我在这里提交容量请求,以确保我们的盒子可以在我们托管服务时处理流量.
所以容量人员问我 –
知道这些调用的估计CPU和IO时间是多少?
谁能用简单的语言告诉我这些术语的含义是什么?我应该采取什么方法来粗略估计这些电话?
谢谢您的帮助.
更新: –
假设这是我的程序.
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环境中工作.
最佳答案 我相信您需要测量应用程序活动导致的CPU消耗和IO负载.
如果您使用的是类Unix系统,则可以使用
> top命令用于手动监控
> vmstat用于整机的自动监控
> ps,具有监控特定流程的适当选项.
在Windows上从使用任务管理器开始.您还可以在vbs或jscript中实现使用WMI获取相同数据的脚本.
如果您需要在java中实现与平台无关的方式,则可以使用JMX. System bean至少提供有关CPU消耗的有限信息.