温馨提示×

centos readdir怎样限速

小樊
44
2026-09-15 06:51:02
栏目: 智能运维

CentOS 上,“readdir 限速”通常不是直接限制 readdir() 系统调用本身,而是限制目录遍历/文件扫描的速率(例如 lsfindrsync备份程序等触发的 readdir)。

下面按常见场景给你几种可行方案。


一、应用层限速(最推荐,简单可控)

1. 用 find + sleep 限速

适合扫描大量小文件时降低 IO 压力:

find /data -type f -exec sh -c 'echo "$1"; sleep 0.01' _ {} \;

每秒大约 100 个文件。


2. 用 rsync 限速(最常用)

如果是备份/同步:

rsync -a --bwlimit=10000 /src/ /dst/

--bwlimit 单位是 KB/s


3. 用 ionice 限制 IO 优先级(不影响速度但降权重)

ionice -c 2 -n 7 find /data
  • -c 2:best-effort
  • -n 7:最低优先级

适合:不想影响系统其他进程,但不严格限速


二、文件系统 / 挂载层限速(偏底层)

4. 使用 systemd 限制 IO(CentOS 7+)

对某个服务限制磁盘 IO:

[Service]
IOReadBandwidthMax=/data 10M
IOWriteBandwidthMax=/data 10M

或临时:

systemctl set-property nginx.service IOReadBandwidthMax=/data 10M

会影响该 service 下的所有 readdir / read / write


5. 用 cgroups 直接限制 IO(高级)

cgcreate -g blkio:/limited
echo "8:0 10485760" > /sys/fs/cgroup/blkio/limited/blkio.throttle.read_bps_device

把进程加入 cgroup:

cgclassify -g blkio:/limited <pid>

三、网络文件系统(NFS / SMB)场景

如果是 NFS readdir 太频繁

  • 客户端挂载时加:
mount -o rsize=8192,wsize=8192,actimeo=60 nfs-server:/data /mnt
  • 或限制客户端扫描进程 IO(见上)

四、内核层面(不推荐常规使用)

  • 直接限制 readdir() 系统调用 没有原生参数
  • 只能通过 IO 限速 / cgroup / 调度策略 间接实现

推荐总结

场景 推荐方案
备份 / 同步 rsync --bwlimit
扫描目录 ionice + sleep
服务级限制 systemd IO*
严格限速 cgroups blkio

如果你能说明:

  • CentOS 版本
  • 本地磁盘 / NFS / 容器
  • 是哪个程序在调用 readdir

我可以给你更精确的一条命令方案

0