获取Java中的硬盘访问计数

时间:2013-02-21 16:22:49

标签: java hard-drive measurement sigar

我想测量一下程序对硬盘的访问量(以及有多少Bytes readed / written)。我搜索了问题,并发现,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或其他库来衡量这一点?

提前致谢 DaGeRe

2 个答案:

答案 0 :(得分:2)

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

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

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

jvisualvm IO probes

...此程序可读写22个字节

#! Python3
import random
upper = 10
number = random.randint(1, upper)
print(number)  #TODO: THIS LINE FOR TESTING ONLY
print("Guess a number between 1 and {}. Press Q to quit!".format(upper))
total_guesses = 0
guess = 0
while guess != number:
    total_guesses += 1
    guess = input()
    if guess.isalpha():
        if guess == "q" or "Q":
            break
        elif guess != "q" or "Q":
            print("Please type in a valid guess.")
            guess = 0
    if guess.isnumeric():
        guess = int(guess)
        if guess == number:
            print("Good job! You guessed the number in {} tries!.".format(total_guesses))
            break
        if guess < number:
            print("Guess Higher!")
        if guess > number:
            print("Guess lower!")
    else:
        print("Valid inputs only")
        guess = 0

答案 1 :(得分:0)

我管理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);