我有一台安装了 cifs 共享(Azure 存储文件)的服务器。有时 ls 返回速度很慢(20 秒)。经过一番调试,我发现:
ls /data/some/symlink/directory
20 秒后返回- 进入 /data/some/symlink/ 目录然后执行
ls .
需要 0.02 秒 - 这样做
ls /data/original/location/that/symlinkpoints/to/directory
也会返回亚秒
ls 的 20 秒返回时间似乎受目录中文件数量的影响。目录越大,所需时间越长。
这让我觉得这与 ls 处理符号链接的方式有关。好像它必须为每个文件解析它之类的。
为了调试这个问题,我想通过 strace 运行 ls 来看看是否能看到不同情况下系统调用的差异。但是如果我运行
strace ls /data/some/symlink/directory it also returns sub second suddenly.
关于为什么通过 strace 运行可以使其运行得更快以及如何进一步调试,有什么想法吗?
答案1
结果是 ls /home/someuser/.bashrc 的别名:alias ls='ls --color=auto'
--color=auto 选项导致 ls 在我的终端中返回颜色,但在 strace 中不返回。为了支持颜色,它需要统计文件。