0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式分享#61:为什么find 首次搜索慢?

BSP调试从0到1 来源:嵌入式分享 作者:嵌入式分享 2026-05-21 21:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

正文

两个问题:

(1)为什么find 首次搜索慢?

(2)频繁使用 find 会吃内存吗?

最近在调试 RK3576 Android 系统时,经常需要使用find -iname XXX搜索文件,发现了两个有意思的现象:

第一次全局搜索,足足等了 几分钟才出结果;紧接着再执行一遍相同的命令,居然几秒就搞定了!

wKgZPGoPBoGARtnbAAICm9DD8N4499.png

当时我心里就打了个问号:为啥同一个命令,第一次这么慢,第二次却快到离谱?

更让我有点慌的是 —— 我这一天下来,为了找各种配置文件、安装包,反复执行了几十次find命令。这频繁操作,会不会把系统内存 “吃” 掉?

相信不少嵌入式开发Linux 运维的朋友,都遇到过类似的疑惑。今天就一起看看这是怎么回事?!

1 为什么 find 首次搜索慢?

核心原因:这是 Linux 系统页缓存(Page Cache)目录项缓存(Dentry Cache)共同作用的结果,也是系统刻意做的性能优化。(之前也写过一篇文章《为什么要sync?》)

第 1 次 find:find命令需要遍历目录、读取文件元数据(文件名、inode、路径等),这些数据原本只存在于硬盘中,磁盘 IO 是慢速操作(毫秒级),所以耗时久;

第 2 次 find:第一次遍历后,Linux 会自动把这些磁盘数据加载到内存的「页缓存」和「目录项缓存」中,第二次搜索直接从内存读取(纳秒/微秒级),速度提升几十到上百倍。

wKgZPGoPBoKAcNmWAAICm9DD8N4089.png

2 频繁使用find会不会导致内存空间减少?

结论先行:短期会占用少量内存,但不会“永久减少”,系统会自动回收,无需担心内存耗尽

1.find占用内存的本质

find 执行时,系统会把遍历过的文件元数据(不是文件内容)加载到「页缓存」中,目的是加速后续同类操作;

这些缓存属于「可回收内存」——Linux 会优先用空闲内存做缓存(反正内存闲着也是闲着),不会占用应用程序的“活跃内存”。

2. 内存不会被永久占用的原因

Linux 内核有一套智能的缓存回收机制:

当系统有其他程序(比如你的应用、apt 安装软件)需要内存时,内核会自动释放「页缓存」占用的内存,分配给需要的程序;

即使频繁执行find,缓存也只会缓存“最近访问的目录/文件元数据”,不会无限制增长(比如反复搜索同一个目录,缓存不会重复占用更多内存);

可以通过free -h查看内存状态:buff/cache列就是缓存占用的内存,这部分内存是“可用的”,并不是“被占用且无法释放的”。

wKgZPGoPBoKAEVuGAAAwtBxe8Ws038.png

3 实用优化建议

缩小搜索范围(最有效):不要全局搜索 /,而是指定具体目录,既减少遍历耗时,也减少缓存占用的内存;

排除无关目录:搜索时排除 /proc、/sys、/dev 等虚拟文件系统(这些目录无实际文件,遍历纯耗时间):

find / -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -iname LedControl.apk -print2>/dev/null
wKgZPGoPBoKADDZLAAAJb4xKV-c745.png

4 总结

第一次find慢的核心原因 第一次遍历需从磁盘读取文件元数据,第二次直接读内存缓存,这是 Linux 正常的性能优化机制;

频繁用find对内存的影响 短期会占用少量内存做缓存,但缓存是可回收的,系统会自动释放,不会导致内存永久减少或耗尽;

优化建议 缩小搜索范围,既能提升速度,也能减少不必要的缓存占用。

你有更好的find优化建议吗?或者你在使用find时遇到过哪些性能问题? 欢迎在评论区交流分享~

(完)

本人专注 Linux 驱动 & Linux/Android BSP 开发调试,可接外包项目/技术支持/问题定位。有需求或交个朋友可加微信:【Chen_WeChat2025】。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5212

    文章

    20763

    浏览量

    338740
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式软件怎么学?

    和电子邮件订阅等途径来获取信息。3.搜索引擎是好的教学老师在对搜索引擎的使用调查中,百度虽然占据搜索引擎市场中绝大部分的市场份额,但是有超过60%以上的嵌入式工程师还是非常偏爱goog
    发表于 12-11 15:06

    如何学习嵌入式

    搜索过如何学习嵌入式,希望能够有人给我提供一些指导,因此我深知各位想学习嵌入式的朋友会遇到的一些问题,我在这里将我的学习心得告诉大家,希望对大家的嵌入式学习提供一定的帮助。
    发表于 11-05 07:41

    [学习嵌入式]嵌入式系统学习方法,轻松入门嵌入式

    [学习嵌入式]嵌入式系统学习方法,轻松入门嵌入式
    发表于 03-28 15:29 79次下载

    嵌入式消费设备的本机搜索

    随着便携嵌入式设备中可用内存的增加,设计者在不断探索标签、存储、定位和检索本机信息的数据管理技术。 强劲的搜索能力已经使得网络成为一个巨大的资源。Google等网络搜索巨头也开始将眼光投向桌面
    发表于 11-06 11:59 0次下载

    嵌入式软件是什么意思_嵌入式软件的分类有哪些

    本文首先阐述了嵌入式软件的概念,其次介绍了嵌入式软件的特征,最后介绍了嵌入式软件的分类。
    发表于 08-31 15:54 1.7w次阅读

    什么是嵌入式_如何入门和提高嵌入式

    因为首先,嵌入式有不少组合名词,例如嵌入式系统,嵌入式软件,Linux嵌入式,Android嵌入式嵌入
    发表于 09-21 15:00 8807次阅读

    嵌入式系统与嵌入式PLC

    嵌入式系统与嵌入式PLC(嵌入式开发面试题目)-该文档为嵌入式系统与嵌入式PLC总结文档,是一份很不错的参考资料,具有较高参考价值,感兴趣的
    发表于 07-30 10:38 24次下载
    <b class='flag-5'>嵌入式</b>系统与<b class='flag-5'>嵌入式</b>PLC

    嵌入式论文

    嵌入式论文(linux嵌入式开发教程)-嵌入式论文                       
    发表于 07-30 14:34 22次下载
    <b class='flag-5'>嵌入式</b>论文

    嵌入式详解

    嵌入式详解(stm32嵌入式开发实例)-嵌入式详解,有需要的可以参考!
    发表于 07-30 16:07 64次下载
    <b class='flag-5'>嵌入式</b>详解

    嵌入式】基于ARM的嵌入式Linux开发总结

    前言嵌入式知识点复习一嵌入式知识点复习二 --体系结构嵌入式知识点复习三 --ARM-LINUX嵌入式开发环境嵌入式知识点复习四 --arm
    发表于 10-19 18:32 28次下载
    【<b class='flag-5'>嵌入式</b>】基于ARM的<b class='flag-5'>嵌入式</b>Linux开发总结

    什么是嵌入式?你眼中的嵌入式是怎么样的?怎么学嵌入式?教你五分钟看懂嵌入式

    你眼中的嵌入式是怎么样的?嵌入式的定义从技术上来区分嵌入式嵌入式硬件工程师必备技能嵌入式驱动工程师必备技能
    发表于 10-20 16:21 12次下载
    什么是<b class='flag-5'>嵌入式</b>?你眼中的<b class='flag-5'>嵌入式</b>是怎么样的?怎么学<b class='flag-5'>嵌入式</b>?教你五分钟看懂<b class='flag-5'>嵌入式</b>。

    视频教程-嵌入式Linux开发基础-嵌入式

    嵌入式Linux开发基础 嵌入式工程师、嵌入式讲师、10多年嵌入式开发实战经...
    发表于 11-02 13:21 30次下载
    视频教程-<b class='flag-5'>嵌入式</b>Linux开发基础-<b class='flag-5'>嵌入式</b>

    嵌入式学习之路:初识嵌入式

    一、初识嵌入式1.1 什么是嵌入式?1.1.1单片机开发:1.1.2嵌入式开发:1.2 单片机开发与嵌入式开发分区别1.2.1单片机开发1.2.2
    发表于 01-04 10:45 76次下载
    <b class='flag-5'>嵌入式</b>学习之路:初识<b class='flag-5'>嵌入式</b>

    用于嵌入式设备的JavaScript

      这些开发系统中的每一个都是在嵌入式设备上开始 JavaScript 开发的好工具。尽管 JavaScript 在近 20 年前首次引入,但它才刚刚开始用于嵌入式计算。
    的头像 发表于 06-29 09:39 4634次阅读
    用于<b class='flag-5'>嵌入式</b>设备的JavaScript

    飞凌嵌入式亮相上海国际嵌入式

    6月14日,备受行业关注的“Embedded World China上海国际嵌入式展”正式拉开帷幕,这是德国Embedded World品牌首次进入中国市场,旨在为国内嵌入式行业高质量供应商与尖端
    的头像 发表于 06-15 17:54 1682次阅读
    飞凌<b class='flag-5'>嵌入式</b>亮相上海国际<b class='flag-5'>嵌入式</b>展