我们有一个 NFS 挂载点和一个 PBS 集群,其中所有节点都挂载该 NFS 挂载点。
我们发现,PBS 集群节点之一上的单个进程可能会完全饱和,并导致该节点上的 NFS 挂载陷入瘫痪。这是一个大问题,因为 PBS 通常会在同一节点上安排多个作业,这些作业仅指定 CPU 和内存约束,但 PBS 似乎并不关心 IO 约束。这意味着单个 IO 绑定作业可能不需要太多 CPU 和内存,但可能会导致整个节点不可用,至少在 NFS 挂载方面如此。
我可以通过在节点上运行以下命令来重现此问题:
cat /nfsmount/verylargefile.txt > /dev/null
这将从根本上阻止该节点上的任何其他进程访问 NFS 挂载。即使执行简单的“ls /nfsmount”也会花费很长时间。请注意,同一 NFS 挂载点在其他节点上的性能不会受到影响,因此这似乎是客户端问题。
有人有过这种行为的经历吗?我应该寻找什么陷阱吗?我原以为,如果有多个进程访问 NFS 挂载,就必须有一些逻辑来尝试分配 NFS 挂载的“带宽”,以防止单个进程占用这种资源。
我们的 PBS 集群正在运行 RedHat 6.5,但我也在我的 Ubuntu 14.04 工作站上重现了这一点。