问题现象

当您用台 ECS 挂载同一个 NFS 文件系统,在 ECS-A 上 append 写文件,在 ECS-B 用 tail -f 观察文件内容的变化。在 ECS-A 写完之后,在 ECS-B 看到文件内容变化会有 10-30 秒的延时。然而相同的场景下,如果直接在 ECS-B 上打开文件(比如 vi )却是立即可以看到更新的内容的。

原因

该现象与 mount 的选项以及 tail -f实现相关。

用户使用的mount命令为:mount -t nfs4 /mnt/

对于在 ECS-B 上以这一方式 NFS mount 的文件系统,默认情况下 kernel 对文件和目录的属性维护了一份metadata 缓存,文件和目录属性(包括许可权、大小、和时间戳记)缓存的目的是减少 NFSPROC_GETATTR 远程过程调用(RPC)的需求。

tail -f 的实现是 sleep + fstat 来观察文件属性(主要是文件大小)的变化,然后读入文件并输出。可见,tail -f 是否能实时输出文件内容主要取决于 fstat 的结果,由于 metadata cache 的存在,fstat 轮询到的并不是实时的文件属性。因此,即使在 NFS 服务器端文件已经更新了,但 tail -f 却没法知道文件已经改动了,于是输出就会出现延时。

解决方法

使用 mount 的 noac 选项可以 disable 文件和目录属性的缓存。

mount -t nfs4 -o noac /mnt/

参考:不同共享客户端间的数据不同步

最新文章

  1. 已解决:Strict Standards: Only variables should be passed by reference in
  2. 七个结构模式之桥接模式(Bridge Pattern)
  3. Spring4学习笔记-AOP
  4. java中的日期转换
  5. sqlserver数据库触发器和存储过程案例学习
  6. Chipscope 仿真VmodCAM IIC程序
  7. git push冲突解决
  8. JS 添加千分位,测试可以使用
  9. Java源代码分析与生成
  10. Python获取Origin官网视频
  11. 好的组件,无须太复杂 – KISSY Slide 组件简介
  12. S3C6410嵌入式应用平台构建(三)
  13. java常用内存设置
  14. Java面试系列之HashMap大扫盲汇总
  15. 每天学点SpringCloud(九):SpringCloud最常用配置详解
  16. Python date,datetime,time等相关操作总结
  17. Codeforces1037G A Game on Strings 【SG函数】【区间DP】
  18. asp.net mvc url应用
  19. Java 程序员必须收藏的资源大全
  20. [19/04/17-星期三] Java的动态性_反射(Reflection)机制

热门文章

  1. Android apps for “armeabi-v7a” and “x86” architecture: SoC vs. Processor vs. ABI
  2. (转)MyBatis传入多个参数的问题
  3. spring cloud 服务容错保护 - Hystrix
  4. 【数据结构与算法】单链表操作(C++)
  5. Linux时间日期类,压缩和解压类
  6. PowerBuilder学习笔记之14用户自定义对象
  7. pandas 学习 第十一篇:处理缺失值
  8. lightGBM gpu环境配置
  9. Oracle For Linux 恢复日记 霆智X8III
  10. protoc文件生成cs文件