如何在Unix环境中找出CPU和IO时间

时间:2013-03-17 00:26:49

标签: java rest unix io cpu-time

我有一个简单的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环境中找出这些调用的CPUIO time吗?我只需粗略估计这些电话。

1 个答案:

答案 0 :(得分:1)

如果“外部调用”是外部应用程序的执行(例如通过exec()),您可以(理论上)通过将应用程序包装在time中或使用{{1}来获取一些统计信息处理会计资料。

但是,您似乎想要找出服务用于处理单个请求的资源。除了通过让服务本身来衡量和报告它之外,没有办法获得这些信息。

您可以从外部(即从客户端)捕获的唯一内容是每个请求的已用时间。