获取Java中的硬盘访问计数

获取Java中的硬盘访问计数,java,hard-drive,measurement,sigar,Java,Hard Drive,Measurement,Sigar,我想测量一个程序对硬盘的访问量(读写字节数)。我在谷歌上搜索了这个问题,发现Sigar应该能够记录这样的东西,但在继续搜索之后,我没有找到任何东西来获取读/写计数。在节目开始之前,我会 sigar = new Sigar(); sigar.enableLogging(true); 战后,我知道 sigar.enableLogging(false); for ( FileSystem fs : sigar.getFileSystemList() ) { if ( fs.getType() =

我想测量一个程序对硬盘的访问量(读写字节数)。我在谷歌上搜索了这个问题,发现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());
  }
}
但这并没有返回任何sensevell(我已经用一个java程序尝试过了,它只写数字,它说有硬盘使用

sigar.getDiscussion
似乎也只显示文件系统中使用了多大的部分,而没有显示访问量。有人知道如何使用sigar或其他库来衡量这一点吗

提前谢谢
DaGeRe

jvisualvm有一个名为Tracer IO Probes的插件,可用于计算以下各项:

  • 文件I/O计数:读/写操作的调用计数
  • 文件I/O字节:读取或写入文件的字节数
  • 文件I/O大小:每次读/写操作的平均字节数
它将显示22字节的前1次写入计数,然后22字节的2次读取计数

…对于这个写和读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);
我管理这个项目。有一个带有
getBytesRead()
getBytesWrite()
的方法,它将返回该程序对光盘的访问

它不会在进程级别返回读取/写入的确切数量,但在设备级别会返回:有方法
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();
OSProcess proc = os.getProcess(pid);