在 Solaris 上对 Java 应用程序进行硬挂载,关闭 NFS 服务器会导致 Java 应用程序卡住

在 Solaris 上对 Java 应用程序进行硬挂载,关闭 NFS 服务器会导致 Java 应用程序卡住

我有一个 Java 应用程序,它使用硬挂载访问 NFS 共享(软挂载确实很麻烦,出于某种原因,我收到许多 RPC 超时)。我在 Solaris 上。如果我关闭(svcadm -v disable nfs 服务器),那么我的 Java 应用程序就会卡住,如果这样做

kill -3 myPID

由于我的 java 进程挂起,所以什么也没有返回 - 奇怪,为什么即使 kill -3 来获取线程转储也没有返回?此外,我甚至在终止进程时也遇到了问题 - 这不是我想要做的事情,我我不想让我的应用程序在安装失败时卡住 有没有人有解决方案或可以建议我应该怎么做?我想使用软挂载,问题是当我尝试将文件从一台服务器复制到 nfs 共享时,会出现许多 RPC 超时。

 NFS write failed for server xx.xx.xx.xx: error 5 (RPC: Timed out)
 cp: /share/myfile.txt: Connection timed out

因此,因为我在使用软挂载时遇到这些错误,而且它看起来不可靠(它通过 tcp),所以我希望测试硬挂载,但如果共享由于某种原因关闭,这会导致我的应用程序卡住。

答案1

无限期地阻塞并重试正是硬挂载的定义。intr如果我没有看错文档,将选项传递给 mount 命令至少应该允许您在挂载失败时中断阻塞。

更多详情请点击这里。

答案2

有两个问题。对于您的应用,从线程中获取堆栈跟踪并查看它们挂起的位置。也许它们间接接触了依赖于 NFS 路径的某些内容(例如,您的 PATH 变量中是否有任何 NFS 挂载目录?)。

RPC 超时可能是由于网络不稳定或客户端使服务器过载等原因造成的。您必须仔细调查。TCP 上的软挂载工作得很好,我们广泛使用它。

相关内容