ls 在远程服务器上执行缓慢

ls 在远程服务器上执行缓慢

我有一个非常奇怪的问题,如果没有机器访问可能很难诊断,但也许这里有人可以帮忙。

我使用的是 OS X,在我的本地机器上ls可以立即执行。但是,当我登录一个特别的远程服务器,并且ls仅在主目录中执行,返回大约需要 15 秒。而且主目录中只有几个文件。如果我切换到子目录或更高目录,则ls立即执行。

现在有一件奇怪的事情:如果我使用不同的计算机访问远程服务器并ls在主目录上运行,它会立即返回。

总结:我的笔记本电脑 + 远程服务器 + 目录 = ls 执行缓慢

有什么想法吗?或者至少有一种方法可以调试这个问题?

编辑:好吧,更奇怪了。只有在第一次执行 ls 时速度很慢。所有后续执行都很快。我想在第一次执行速度如此之慢之后,我再也不想输入它了。

答案1

很难确定到底发生了什么。你的症状可以可以通过实际问题(嗯,不是那么重要的问题)和测试偏见的混合来轻松解释。

例如,假设 Linux 服务器只是空闲其磁盘并且您想要的目录不在缓存中(或者可能它被安装或链接到旋转的设备上,作为外部磁盘)。

然后第一次访问需要启动/停止,然后就需要 15 秒。

您进入另一个目录,速度很快,因为它要么在另一台设备上,要么在现在旋转的设备上。

您返回到同一个目录,现在速度很快(IOSS 缓存可能也与此有关)。

您注销并从其他地方登录,但是现在设备仍在旋转,缓存仍处于准备状态,并且目录速度很快。

为了确保这不是这样的问题,你需要等待适当的时间,然后从第三计算机——速度很快的那台ls——然后检查现在ls是否慢的

答案2

回答有关如何调试此问题的部分。在 Linux 会话中尝试此操作:

sudo strace ls

并注意挂起约 15 秒的系统调用。

(在 OS-X 上,可以使用 'dtruss',或者使用 dtrace ( man dtrace))

相关内容