在 Ubuntu(以及绝大多数 Linux 发行版)上,opendir() 本身并不一定慢,但在某些场景下会显得非常慢。下面按“常见原因 → 原理 → 解决办法”说明。
opendir() 后第一次 readdir() 很慢ls 也慢opendir() 只是打开目录data/2026/01/23/xxx
opendir + readdir 明显变慢opendir 可能极慢opendir() 卡几秒readdir 都可能和服务器交互actimeo、lookupcache)opendir() 触发安全检查auditd 开了文件访问审计sudo auditctl -l
systemctl status apparmor
df -i
iostat -x 1
dmesg | tail
很多人误以为:
dir = opendir(path); // 慢
实际上:
while ((ent = readdir(dir))) // 真正慢
opendir() 只是打开 fd,readdir() 才读内容。
stracestrace -T ls dir
看:
openat() 耗时getdents64() 耗时timetime ls dir >/dev/null
Ubuntu 上
opendir慢,90% 是因为目录太大、文件系统不合适,或目录位于网络/容器/安全审计环境中。
如果你愿意,可以告诉我:
我可以给你更具体的优化方案。