如何查找CPU和IO时间?

时间:2013-03-15 19:21:14

标签: java rest io visualvm cpu-time

我们有一个基于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环境中工作。

1 个答案:

答案 0 :(得分:2)

我认为您需要测量应用程序活动导致的CPU消耗和IO负载。

如果您使用的是类Unix系统,则可以使用

  1. top手动监控命令
  2. vmstat用于整机的自动监控
  3. ps有适当的选项来监控具体流程。
  4. 在Windows上从使用任务管理器开始。您还可以在vbsjscript中实现使用WMI获取相同数据的脚本。

    如果您需要在java中实现与平台无关的方式,则可以使用JMX。 System bean至少提供有关CPU消耗的有限信息。