![ls 在远程服务器上执行缓慢](https://linux22.com/image/1353730/ls%20%E5%9C%A8%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%89%A7%E8%A1%8C%E7%BC%93%E6%85%A2.png)
我有一个非常奇怪的问题,如果没有机器访问可能很难诊断,但也许这里有人可以帮忙。
我使用的是 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
))