【问题标题】:How to find CPU and IO time?如何查找 CPU 和 IO 时间?
【发布时间】: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 的建议。使用visualvmyourkit,我们可以找出 IO 和 CPU 时间吗?如果是,我如何在分析我们的 REST 调用后找出答案?意味着我应该研究什么组件来找出这些东西?感谢您的帮助。
  • 您想告诉我们您不知道 CPU 时间是多少?
  • @lngo,我想弄清楚如何计算这些东西?

标签: java rest io visualvm cpu-time


【解决方案1】:

我相信您需要测量由应用程序活动引起的 CPU 消耗和 IO 负载。

如果你在类 Unix 系统上,你可以使用

  1. top手动监控命令
  2. vmstat整机自动监控
  3. ps 带有适当的选项来监控特定进程。

在 Windows 上从使用任务管理器开始。您还可以在vbsjscript 中实现使用WMI 获取相同数据的脚本。

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

【讨论】:

  • 感谢亚历克斯的建议。你能用一种简单的语言解释一下这里的 IO 负载和 CPU 消耗是什么意思吗?我有轻微的背景,但想确定我所知道的是否正确。谢谢您的帮助。我将在 Windows 环境中工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 2011-07-04
  • 2019-06-15
  • 1970-01-01
  • 2018-07-25
相关资源
最近更新 更多