【问题标题】:Get Count of hard disc accesses in Java获取 Java 中的硬盘访问次数
【发布时间】:2013-02-07 01:42:02
【问题描述】:

我想测量一个程序对硬盘的访问量(即读取/写入的字节数)。我用谷歌搜索了这个问题,发现 Sigar 应该能够记录这样的事情,但是在继续搜索之后,我没有找到任何可以获取读/写计数的东西。在程序开始之前,我会这样做

sigar = new Sigar();
sigar.enableLogging(true);

战后,我愿意

sigar.enableLogging(false);
for ( FileSystem fs : sigar.getFileSystemList() )
{
  if ( fs.getType() == FileSystem.TYPE_LOCAL_DISK )
  {
        System.out.println("Dev: " + fs.getDevName() + ": " + sigar.getDiskUsage(fsName).getReads() +" "+ sigar.getDiskUsage(fsName).getWrites());
  }
}

但这并没有返回任何有感的结果(我已经用 java 程序试过了,它只写数字,它说有硬盘使用情况。

sigar.getDiscUsage 似乎也只显示文件系统的使用量,而不是访问量。有没有人提示如何使用 sigar 或其他库来衡量这个?

提前致谢 达格雷

【问题讨论】:

  • "对硬盘的访问量(所以读/写了多少字节)" 它们不是一回事。您可以测量输入和输出的字节数,但您绝对无法知道访问了多少磁盘。

标签: java hard-drive measurement sigar


【解决方案1】:

有一个名为 Tracer-IO Probes for jvisualvm 的插件,可以计算以下内容:

  • 文件 I/O 计数:读/写操作的调用计数
  • 文件 I/O 字节:读取或写入文件的字节数
  • 文件 I/O 大小:每次读/写操作的平均字节数

它将显示前 1 个 22 字节的写入计数,然后显示 2 个 22 字节的读取计数 ...

jvisualvm IO probes

...对于这个写入和读取 22 个字节的程序

System.in.read();
byte[] bytes = "Writing this to a file".getBytes();
Path path = Files.createTempFile("io-probes-test", ".txt");
path.toFile().createNewFile();
Thread.sleep(2000L);
Files.write(path, bytes);
Thread.sleep(10000L);
Files.readAllBytes(path);
Thread.sleep(2000L);
path.toFile().delete();
Thread.sleep(5000L);

【讨论】:

    【解决方案2】:

    我管理OSHI 项目。有一个OSProcess class 方法getBytesRead()getBytesWritten() 将返回该程序对磁盘的访问。

    它不会在进程级别返回确切的读/写次数,但它会在设备级别返回:HWDiskStore class 具有方法 getReads()getReadBytes() 以及相同的写入方法,所以如果您同时测量程序和磁盘,您可能可以得出一个比率并对程序本身有一个很好的估计。

    获取该数据的代码...从 SystemInfo 对象开始:

    SystemInfo si = new SystemInfo();
    

    获取包含计数和字节的硬盘列表:

    HardwareAbstractionLayer hal = si.getHardware();
    List<HWDiskStore> disks = hal.getDiskStores();
    

    用字节获取进程列表:

    OperatingSystem os = si.getOperatingSystem(); 
    List<OSProcess> procs = os.getProcesses();
    

    或者如果您知道您正在测量的进程 ID:

    OSProcess proc = os.getProcess(pid);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-27
      • 2012-01-07
      • 2023-03-09
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2014-06-02
      相关资源
      最近更新 更多