我写了一个小脚本来打印内存使用情况,在一个大的顺序写入文件。
#!/bin/bash rm result echo 3 > /proc/sys/vm/drop_caches sync; echo start nohup time dd if=/dev/zero of=mem bs=1M count=2000 & for i in {1..200} do sleep 0.2 cat /proc/meminfo | grep Dirty >> result cat /proc/meminfo | grep Dirty done cat nohup.out cat result
我应该从运行开始就看到“脏”的大小的增加。 但是当我运行这个脚本的时候,经常会看到一个很大的延迟(最多几秒钟),在这个过程中,“Dirty”大小不会增加,这可能意味着“dd”程序的启动被延迟了。 示例有问题的输出是:
Dirty: 20 kB Dirty: 20 kB Dirty: 20 kB Dirty: 20 kB Dirty: 20 kB Dirty: 24 kB Dirty: 24 kB Dirty: 24 kB Dirty: 24 kB Dirty: 28 kB Dirty: 28 kB Dirty: 28 kB Dirty: 28 kB Dirty: 28 kB Dirty: 16528 kB Dirty: 140608 kB Dirty: 277228 kB Dirty: 311768 kB Dirty: 434308 kB Dirty: 563352 kB Dirty: 690952 kB ...
延误的时间长短是不确定的,有时候根本没有任何延误。 而相反,当我跑了
time dd if=/dev/zero of=mem bs=1M count=2000
用一些实时的meminfo查看器,比如:
#!/bin/bash clear while true do sleep 0.2 tput home cat /proc/meminfo done
我总是看到“脏”的大小立即增加。 我的脚本有问题吗? 我也怀疑操作系统是如何执行“写入”操作的,因为我还testing了文件读取,并在/ proc / meminfo中检测到“Cached”字段,似乎没有任何延迟。
谢谢,
nohup time dd if=/dev/zero of=mem bs=1M count=2000 &
你的系统上有“时间”二进制文件吗? 否则nohup不知道如何自己运行内部的bash,它会失败
您可以通过调用脚本来确定占用额外时间的是什么
/bin/bash -x /path/to/script
并观看输出。 这将在执行时打印脚本的每一行代码。 另外,你也可以用time命令给每个命令加上前缀,这个额外的时间会变得很明显。