因为我的项目中存在文件写入后无法保存到磁盘的情况,所以后台添加了这两个脚本。它们会对系统性能产生影响吗?
我的设备可能经常遇到异常断电而不是重新启动或关闭。我希望异常断电前1秒写入文件的数据也能保存到磁盘上,但实际情况是经常无法保存到磁盘上。
我的设备有 UPS(不间断电源系统)。我正在使用C++编程。
自动同步.sh:
#!/bin/sh
while true; do
sync
sleep 1
done
autoCacheFree.sh:
#!/bin/sh
drop_caches() {
echo "Drop caches."
sync
echo 1 > /proc/sys/vm/drop_caches &
return 0
}
while true; do
sleep 600
drop_caches
done
/etc/fstab:
#device mount-point type options dump fsck order
/dev/mmcblk3p3 /dobot ext3 defaults 0 0
/dev/mmcblk3p6 /dobot/userdata ext3 defaults 0 0
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
var /dev tmpfs defaults 0 0
ramfs /dev ramfs defaults 0 0
答案1
autoSync.sh
sync
每秒运行一次;这意味着每秒所有挂起的磁盘写入都会被强制写入磁盘。这所产生的影响取决于底层存储,但在所有情况下,它都会增加写入的数据量:在一般操作中,许多写入最终是不必要的(因为它们被后来接触相同数据的写入所取代,或者它们是对临时文件的写入,这些文件很快就会被删除),并且sync
定期运行可以减少避免此类不必要的写入的时间。
autoCacheFree.sh
sync
每十分钟运行一次并清除页面缓存。效果sync
与前面讨论的相同。清除pagecache意味着所有后续读取都必须从底层存储中读取,这也会影响性能。
你最好解决根本问题;目前尚不清楚“文件写入后无法保存到磁盘”是什么意思,但我从您编辑的问题中了解到您正在编写一个程序并希望确保它写入的数据尽快存储在磁盘上。正确的方法是调用fsync
每次写完你的关心;这将确保这些写入和写入磁盘上的性能影响比脚本小得多。
还要注意,这while sleep ...; do ...; done
比 更好while true; do ...; sleep ...; done
,因为它更容易停止循环(取消sleep
将退出循环)。