首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法用oshi来获取磁盘活动时间?

有没有办法用oshi来获取磁盘活动时间?
EN

Stack Overflow用户
提问于 2022-11-07 22:25:59
回答 1查看 35关注 0票数 1

因此,我应该使用oshi库获得磁盘活动时间,但是无论我看哪里,我都只能找到如何获得磁盘使用情况,而不是活动时间。用于磁盘使用的IBM文档如下:

如果您知道给定磁盘的访问时间,则可以使用操作系统报告的每秒传输次数来计算磁盘的利用率。为此,将每秒平均传输次数乘以磁盘制造商列出的磁盘访问时间。

有没有一种方法可以获得平均每秒的传输次数和Java的访问时间?

我已经查过了oshi文档,但是找不到什么可以帮忙的东西,也不知道是不是漏掉了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-08 16:45:02

OSHI的HWDiskStore类有一些可能有用的方法:

  • getReads()getReadBytes()总结了
  • getWrites()getWriteBytes()总结了
  • getTransferTime()总结了阅读和写作的总时间。

根据你引用的文档:

您可以使用操作系统报告的每秒传输数来计算磁盘的利用率。

看来您可以将getReads()getWrites()相加,然后除以getTransferTime()转换为“每秒传输”--至少在磁盘处于活动状态时是这样的。总的活动时间可能只是经过时间之后的传输时间。

请注意,所有这些统计数据都是(或应该)单调增加的快照度量,因此它们将给出一个累积的总数。要计算一个时间间隔的使用率,您需要捕获数据两次,然后使用增量计算您的度量。

下面是一些示例OSHI代码来演示计算:

代码语言:javascript
复制
public class Test {

    public static void main(String[] args) {
        HWDiskStore disk = new SystemInfo().getHardware().getDiskStores().get(0);
        System.out.format("Reads: %d, Writes: %d, XferTime: %d, Timestamp: %d%n", disk.getReads(), disk.getWrites(),
                disk.getTransferTime(), disk.getTimeStamp());
        Util.sleep(10000);
        disk.updateAttributes();
        System.out.format("Reads: %d, Writes: %d, XferTime: %d, Timestamp: %d%n", disk.getReads(), disk.getWrites(),
                disk.getTransferTime(), disk.getTimeStamp());
    }
}

这是输出:

代码语言:javascript
复制
Reads: 70472443, Writes: 62744300, XferTime: 30886365, Timestamp: 1667953835809
Reads: 70476812, Writes: 62744787, XferTime: 30887206, Timestamp: 1667953845847

所以我们睡了10秒(实际上是10038毫秒)。在此期间:

  • 70476812-70472443 = 4369读取
  • 62744787-62744300 = 487次写入
  • 30887206-30886365 = 841毫秒的传输时间

由此我们可以得出结论:

  • 磁盘传输数据为841 / 10038次(8.3%)。
  • 传输速率为(4369+487)/841 = 5.77 /毫秒= 5774 /秒。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74353612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档