关于文件的缓存


在很多应用中,都有几台机器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



可新建个空文件是实时的,我还没来得及查找原因。





反正我的问题解决了,在第三点上吃亏,耗费了一个小时。默哀


评论

此博客中的热门博文

每逢中秋倍思亲

查看网卡流量的脚本