关于文件的缓存
在很多应用中,都有几台机器mount一个文件服务器,操作同一组数据,当一个用户修改了数据之后,另外的用户有时无法立刻读到这个修改,导致读取的数据不正确。
有时会出现奇怪的现象,比如我写一个文件,写好后写个.done文件。会出现.done写好,原文件是0k的现象。
[@more@]
通常会有三个方面的原因:
1,写文件的时候存在缓冲:
程序在读写文件的时候,调用的函数或方法通常都是暂时放在读写缓冲池里的。系统会定时写入磁盘(比如1秒1次)。如果实时性要求高,必须人为调用一下实际写入的函数。c里有fsync(),flush()等,java中也有StreamOut.flush().
2,nfs server export时需要设置sync,不过这是默认值,所以一般不会有问题。
3,mount 的时候一定要加-o sync 默认是-o async
可新建个空文件是实时的,我还没来得及查找原因。
反正我的问题解决了,在第三点上吃亏,耗费了一个小时。默哀
评论