0

0

rm -rf 删除百万级小文件卡住的几种加速方案(ionice + nice)

冷炫風刃

冷炫風刃

发布时间:2026-01-21 08:34:45

|

220人浏览过

|

来源于php中文网

原创

本质是I/O和元数据操作瓶颈,应优先用ionice -c3降级I/O类别,配合find -delete或find|xargs分批删除,并启用relatime减少atime更新,nice仅在CPU成为次要瓶颈时辅助使用。

rm -rf 删除百万级小文件卡住的几种加速方案(ionice + nice)

rm -rf 删除百万级小文件时卡住,本质是 I/O 和元数据操作瓶颈,不是 CPU 不够。单纯加 nice(调低 CPU 优先级)几乎没用,真正关键的是控制磁盘 I/O 争抢——ionice 才是核心,配合合理策略才能提速。

优先用 ionice 降级 I/O 类别,避免阻塞系统响应

ionice 控制进程对磁盘的“抢夺强度”,比 nice 管 CPU 更对症。删除大量小文件时,每删一个都要更新 inode、目录项、块位图等,I/O 请求密集且随机,极易拖慢其他服务(如数据库、日志写入)。

  • 推荐用 ionice -c3(Idle 类),表示“只在磁盘空闲时才做 I/O”,最温和,不影响前台业务
  • 若需稍快一点且能接受轻微干扰,可用 ionice -c2 -n7(Best-effort 类,最低优先级),比默认(-n4)更低
  • 绝对避免 -c1(Real-time),会饿死其他进程,风险极高

配合 find + xargs 分批删除,减少单次系统调用开销

rm -rf 递归扫描整个目录树时,要反复 stat、readdir,路径深、文件多时内核开销大。改用 find 按批次交给 xargs 处理,可显著降低路径解析和内存压力。

Anyword
Anyword

AI文案写作助手和文本生成器,具有可预测结果的文案 AI

下载
  • 安全高效写法:
    find /path/to/dir -mindepth 1 -delete(支持 GNU find,原子删除,最快)
  • 兼容旧系统(如 macOS):
    find /path/to/dir -mindepth 1 -print0 | xargs -0 -P1 -n 1000 rm
    其中 -P1 避免多线程加剧 I/O 冲突,-n 1000 控制每批数量,平衡效率与内存

禁用 atime 更新,跳过不必要的元数据写入

每次访问文件(包括 rm 的 stat 操作)默认会更新 atime 字段,产生额外磁盘写入。对纯删除场景毫无意义,却加重 I/O 负担。

  • 临时生效(当前挂载点):
    mount -o remount,relatime /mount/point(比 noatime 更兼容,推荐)
  • 永久生效:编辑 /etc/fstab,在对应分区选项中加入 relatimenoatime
  • 注意:修改后需重新挂载或重启才生效;若不确定影响,先在测试环境验证

慎用 nice,仅在 CPU 成为次要瓶颈时微调

删除小文件时 CPU 占用通常很低,nice 几乎不改善速度,反而可能让进程调度更不及时。只有当同时运行高 CPU 任务(如压缩、编译)导致调度延迟时,才考虑辅助降级:

  • 搭配 ionice 使用:
    ionice -c3 nice -n19 find /path -delete
  • nice -n19 是最低 CPU 优先级,但不要单独用它来“加速”删除
  • 监控确认:用 iostat -x 1 看 %util 和 await,若 %util 接近 100% 且 await 高,说明是 I/O 瓶颈,此时 ionice 有效;若 %util 很低但 CPU 占满,再看 nice

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

143

2025.12.24

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

269

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

210

2023.12.29

macOS怎么切换用户账户
macOS怎么切换用户账户

在 macOS 系统中,可通过多种方式切换用户账户。如点击苹果图标选择 “系统偏好设置”,打开 “用户与群组” 进行切换;或启用快速用户切换功能,通过菜单栏或控制中心的账户名称切换;还能使用快捷键 “Control+Command+Q” 锁定屏幕后切换。

336

2025.05.09

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

352

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2075

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

347

2023.08.31

云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

20

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.8万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 18.9万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号