获取Java中的硬盘访问计数
我想测量一个程序对硬盘的访问量(读写字节数)。我在谷歌上搜索了这个问题,发现Sigar应该能够记录这样的东西,但在继续搜索之后,我没有找到任何东西来获取读/写计数。在节目开始之前,我会获取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 = 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或其他库来衡量这一点吗
提前谢谢
DaGeRejvisualvm有一个名为Tracer IO Probes的插件,可用于计算以下各项:
- 文件I/O计数:读/写操作的调用计数
- 文件I/O字节:读取或写入文件的字节数
- 文件I/O大小:每次读/写操作的平均字节数
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);