gpt4 book ai didi

java - 如何在 Scala/Java 中测量从虚拟机中窃取的时间?

转载 作者:太空狗 更新时间:2023-10-29 11:09:37 24 4
gpt4 key购买 nike

我在 Amazon EC2 微型实例上的 JVM 中运行 Play Framework Scala 应用程序。该应用程序有时会索引大量文本。但是,如果虚拟机的 CPU 一直处于高负载下,管理程序会通过从虚拟机窃取时间并将其分配给由该管理程序管理的其他虚拟机来惩罚虚拟机。

我正在考虑衡量当前被盗的时间量,如果它太高(例如高于 5%),那么我将暂停索引编制一段时间。东西问题:

  1. 这是个好主意吗? (这很疯狂吗?还是有更好的方法?)

  2. 如何衡量从 Scala/Java 中窃取的时间?

    目前我正在考虑执行外部进程调用(e.g. Seq("bash", "-c", "echo date")!!vmstat/proc/stat 并解析输出,并找到被盗的时间。但这可能容易出错?如果 vmstat 的新版本以另一种格式输出数据怎么办。不过,我想 /proc/stat 的输出永远不会以非向后兼容的方式更改。(?)

所有这些都不需要在 Windows 上运行。只有 Linux 版本,例如Ubuntu 和 CentOS。如果外部进程调用失败,我将简单地返回 Scala 的 None 而不是 Some(percentage)

更新:我找到了一个名为 Sigar 的库,带有 a function getStolen这可能是合适的。它返回一个 double 表示“系统 cpu 非自愿等待时间总计”——但以什么单位表示?我想知道这是否不幸是自应用程序启动以来的总计。无论如何,这里有人实际使用它来打印被盗时间:https://forums.oracle.com/thread/1301532

最佳答案

我怀疑这些工具是否支持虚拟机。

我建议定期轮询 System.nanoTime(),当您看到时间跳跃时,您的线程没有运行。你甚至可以做一些像 jHiccup 这样的事情,它只等待一毫秒,然后计算所花费的时间。

注意:即使虚拟机处于空闲状态,这也可能会显示非常差的结果,因此您必须为您的机器调整它。

关于java - 如何在 Scala/Java 中测量从虚拟机中窃取的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18170064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com