当前位置:首页 > 文章列表 > 文章 > linux > Linux fincore 怎样查看文件驻留内存的页数

Linux fincore 怎样查看文件驻留内存的页数

来源:17golang原创 2026-10-30 18:56:49 0浏览 收藏

排查 Linux 文件缓存时,最容易混淆的是“文件有多大”和“文件当前有多少内容驻留在内存里”。fincore 专门回答后一个问题:它会统计文件内容当前驻留的页数。最直接的做法是显式要求输出 PAGES 列,而不是依赖默认列顺序。

如果只想看一个文件,可以先使用下面这条命令。这里的 --output 把列顺序写清楚,--bytes 让字节字段不再使用人类可读后缀。

# 显式保留页数、驻留字节数、文件大小和文件名,便于人工阅读或脚本接管
fincore --output FILE,PAGES,RES,SIZE --bytes /var/log/app.log

其中 PAGES 就是文件内容驻留在内存中的页数;RES 是同一类驻留内容按字节表示的值;SIZE 是文件大小,FILE 是文件名。要回答“驻留了多少页”,看 PAGES,不要拿 SIZE 代替。

先看清 PAGES 和 RES 到底分别表示什么

fincore 的默认列会随着 util-linux 的实现变化,因此官方手册建议在需要稳定输出时使用 --output columns-list。默认输出当前包含驻留字节数、驻留页数、文件大小和文件名,但脚本不应假设这个顺序永远不变。

fincore 将文件映射到 PAGES、RES、SIZE、FILE 字段的静态结构说明图
图1:结构说明图,展示同一个文件如何对应驻留页数、驻留字节数、文件大小和文件名四个观察字段;这不是终端截图。

驻留页数和驻留字节数可以互相校验,但它们的表达目的不同:页数适合判断缓存覆盖了多少个内存页,字节数适合和文件大小比较。页大小由系统决定,所以不要在文章或脚本里把一个固定的字节数硬编码成所有机器都相同的页数。

统计实现还存在一个重要边界。当前 util-linux 的 fincore 会优先使用 cachestat(2);系统不提供该系统调用且没有强制要求时,会回退到 mincore(2)。cachestat 能提供缓存页、脏页、回写页、被驱逐页和最近被驱逐页等更多信息。若文件没有写权限,cachestat 可能返回错误,而出于安全原因,mincore 可能返回把页面视为驻留的模拟数据,因此跨环境比较时要把权限和内核能力一起记录下来。

检查目录时用 -R,汇总时再加 -c

单文件结果只能说明一个对象。若要找出目录中驻留页数较多的文件,可以让 fincore 递归检查目录;若还需要整体数量,再增加 --total。这两种用途要分开理解:递归输出用于定位对象,总计行用于观察这一批输入的合计。

# -R 递归检查目录中的文件,-c 在结果末尾增加这一批文件的总计
fincore -R -c --output FILE,PAGES,RES,SIZE --bytes /srv/data

# 只看 JSON 时仍然显式声明列,避免把默认输出当成稳定协议
fincore --json --output FILE,PAGES,RES,SIZE --bytes /srv/data/report.db

--bytes 对脚本尤其有用,因为 SIZE 和 RES 会直接以字节表示;PAGES 本身仍然是页数。目录中存在无法读取或无法统计的文件时,fincore 会把错误写到标准错误并继续处理命令行中的其他文件,因此批量排查时要同时保留标准错误流。

fincore 的单文件、递归目录与总计关系静态结构说明图
图2:关系说明图,展示 FILE 输入如何形成单文件观察、递归目录集合和 TOTAL 汇总三个静态边界;这不是运行结果截图。

脚本里怎样避免被默认输出拖住

把 fincore 当作命令行接口接入脚本时,建议固定三件事:列名、单位和错误处理。最小稳定组合是 --output FILE,PAGES,RES,SIZE --bytes;需要机器读取时再加 --json。不要只写一条没有列名的 fincore file,然后按第一个字段猜它代表什么。

# 机器读取时固定 JSON、列名和字节单位;失败时保留退出状态给上层处理
if ! fincore --json --output FILE,PAGES,RES,SIZE --bytes "$target"; then
    # 统计失败可能来自路径、权限或系统调用能力,不把空结果当成零页
    printf 'fincore failed for %s\n' "$target" >&2
    exit 1
fi

# 只有明确依赖 cachestat 时才使用 -C;不可用就让命令失败而不是静默回退
fincore -C --output FILE,PAGES,RES,SIZE --bytes "$target"

-C 的含义是强制使用 cachestat(2),如果系统不支持它就失败。这个选项适合你明确需要缓存统计扩展字段的场景,不适合作为普通兼容脚本的默认参数。普通巡检保留默认回退更稳妥,但应在记录中说明实际环境和权限。

几个容易误判的地方

  • 文件大小不等于驻留字节数:冷文件可能很大,但当前驻留页数很少。
  • 页数也不等于永久缓存承诺:文件内容可能随后被回收,结果只描述统计时点。
  • RES 和 PAGES 是同一观察对象的不同单位,不要把二者相加。
  • 脚本需要稳定字段时使用 --output;默认输出是面向人的便利格式,不是长期协议。
  • 递归检查时要准备好标准错误处理,单个文件失败不一定意味着其他文件都没有结果。

相关问题

fincore 的 PAGES 是文件总页数吗? 不是,它表示统计时文件内容中驻留在内存里的页数;文件总大小应看 SIZE,并结合系统页大小理解两者关系。

为什么同一个文件在不同机器上的结果不同? 页面缓存会随访问、回收、权限和内核支持变化;如果一个环境走 cachestat、另一个环境回退到 mincore,可比较的信息范围也可能不同。

怎样让 fincore 输出适合自动化? 显式使用 --output 固定列名,配合 --bytes 和需要时的 --json,同时检查命令退出状态并保留错误流。

因此,查看文件驻留内存页数的核心命令就是 fincore --output FILE,PAGES,RES,SIZE --bytes 文件路径。先用 PAGES 回答问题,再用 RES、SIZE、权限和系统调用路径解释结果,脚本就不会把一次统计误读成永久缓存结论。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
电子档案移交时为什么不能只交正文文件不交元数据电子档案移交时为什么不能只交正文文件不交元数据
上一篇
电子档案移交时为什么不能只交正文文件不交元数据
Go NATS Go 客户端 Flush 成功为什么不等于消费者已处理
下一篇
Go NATS Go 客户端 Flush 成功为什么不等于消费者已处理
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    797次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    786次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    875次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    844次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    676次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码