2013-03-17 62 views
0

我有一个简单的Multithreaded program,它调用External API并从该API获取响应。我正在使用RestTemplate如何找出Unix环境下的CPU和IO时间

问题陈述: -

我试图找出

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 AS-

java - jar REST.jar

谁能告诉我如何一步一步来看着办吧在Unix环境下为这些调用输出CPUIO time ?.我只需要粗略估计这些电话。

+0

你可以在这个线程上找到'cpu use' http://stackoverflow.com/questions/3017162/how-to-get-total-cpu-usage-in-linux-c – cwhsu 2013-03-17 00:53:08

回答

1

如果“外部呼叫”是一个外部应用程序(例如,通过exec())的执行,你可以(在理论上)通过包装或者在time的应用或使用ac进程记帐的东西得到一些统计数据。

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

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

+0

谢谢Stephen。一点点背景 - 我正在提交容量请求,以确保我们的盒子可以在我们托管服务时处理流量。所以容量人员问我 - '不知道这些调用的估计CPU和IO时间是多少?'所以我想,我可以在Unix环境中计算出这些数字吗?所以这就是我编写一个示例程序来获取这些数字的原因,并且每当我们的服务准备就绪时,我也会做同样的事情来计算CPU和IO时间。 – AKIWEB 2013-03-17 22:13:07

+0

没错,你需要在服务器端进行测量。这些信息在客户端的这个粒度上是不可用的。 – 2013-03-18 16:43:02

+0

谢谢Stephen的建议。你能告诉我该怎么做吗?这是我不确定的部分。任何帮助将不胜感激。 – AKIWEB 2013-03-18 17:09:38