在 Debian(以及其它 Linux 发行版)上,readdir 或 readdir() 相关调用“很慢”,通常不是函数本身慢,而是由目录结构、文件系统、挂载选项、缓存状态等因素造成的。下面按常见原因逐一说明。
ls、find、readdir 都很慢readdir 需要遍历整个目录项(directory entry)a/b/c/file)readdir 很慢free -h
cat /proc/slabinfo | grep dentry
echo 3 > /proc/sys/vm/drop_caches # 测试用,不要常做
readdir 极慢ls 卡顿明显readdir 是多次网络往返actimeo=600lookupcache=allreaddir 大目录| 文件系统 | 大目录表现 |
|---|---|
| ext4 | 一般(哈希目录尚可) |
| xfs | 好 |
| btrfs | 大目录可能慢 |
| overlayfs | 多层时慢 |
| tmpfs | 非常快 |
Docker / Kubernetes 常用 overlayfs,大目录 readdir 可能明显慢。
getfacl dir
lsattr -R dir | head
iostat -x 1
uptime
dmesg | tail
readdir 还是 readdir_r / getdents?readdir:C 库封装getdents / getdents64:系统调用(更快)syscall(SYS_getdents64, fd, buf, size);
ls | wc -l
mount | grep -E "nfs|smb|cifs|sshfs"
df -T
你可以补充:
ext4/xfs/overlay)我可以给你更针对性的优化方案。