我想测量一下程序对硬盘的访问量(以及有多少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
答案 0 :(得分:2)
有一个称为jvisualvm的Tracer-IO Probes插件,可以计算以下内容:
它将首先显示22个字节的1个写入计数,然后显示22个字节的2个读取计数...
...此程序可读写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);