因此,我应该使用oshi库获得磁盘活动时间,但是无论我看哪里,我都只能找到如何获得磁盘使用情况,而不是活动时间。用于磁盘使用的IBM文档如下:
如果您知道给定磁盘的访问时间,则可以使用操作系统报告的每秒传输次数来计算磁盘的利用率。为此,将每秒平均传输次数乘以磁盘制造商列出的磁盘访问时间。
有没有一种方法可以获得平均每秒的传输次数和Java的访问时间?
我已经查过了oshi文档,但是找不到什么可以帮忙的东西,也不知道是不是漏掉了什么。
发布于 2022-11-08 16:45:02
OSHI的HWDiskStore类有一些可能有用的方法:
getReads()和getReadBytes()总结了getWrites()和getWriteBytes()总结了getTransferTime()总结了阅读和写作的总时间。根据你引用的文档:
您可以使用操作系统报告的每秒传输数来计算磁盘的利用率。
看来您可以将getReads()和getWrites()相加,然后除以getTransferTime()转换为“每秒传输”--至少在磁盘处于活动状态时是这样的。总的活动时间可能只是经过时间之后的传输时间。
请注意,所有这些统计数据都是(或应该)单调增加的快照度量,因此它们将给出一个累积的总数。要计算一个时间间隔的使用率,您需要捕获数据两次,然后使用增量计算您的度量。
下面是一些示例OSHI代码来演示计算:
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());
}
}这是输出:
Reads: 70472443, Writes: 62744300, XferTime: 30886365, Timestamp: 1667953835809
Reads: 70476812, Writes: 62744787, XferTime: 30887206, Timestamp: 1667953845847所以我们睡了10秒(实际上是10038毫秒)。在此期间:
由此我们可以得出结论:
https://stackoverflow.com/questions/74353612
复制相似问题