统信uos中page cache真实用量需用/proc/meminfo的cached减shmem计算,而非free命令的cached值;执行awk命令可得纯文件页缓存kb值,换算为mb后即为可立即回收的page cache净用量。

要确认统信UOS系统中Page Cache实际占用了多少物理内存,不能只看free命令显示的“cached”值——该字段混杂了可回收的page cache、slab中可回收部分(如dentries/inodes)以及部分不可回收的内核对象,必须拆解内核原始指标才能准确剥离纯Page Cache用量。
查/proc/meminfo中Page Cache对应字段
Page Cache在内核中由多个独立计数器组成,最核心的是Cached和SReclaimable,但Cached包含tmpfs/shmem占用,SReclaimable仅覆盖slab中可回收项;真正属于文件页缓存的主体是Cached减去Shmem(即tmpfs内存),再叠加一部分PageTables和KernelStack之外的间接关联项。直接读取原始数据最可靠。
执行:cat /proc/meminfo | grep -E "^(Cached|Shmem|SReclaimable|MemAvailable)"
输出中重点关注三行:【Cached】 是内核统计的所有页缓存总和(含tmpfs),【Shmem】 是tmpfs和shm内存用量,二者相减即为纯文件Page Cache估算值;SReclaimable反映slab中可回收内存,它虽不属于Page Cache,但常被误计入“缓存”概念中,需单独识别。
用free -h辅助验证Cached是否异常偏高
运行:free -h
观察“Mem”行的“cached”列数值,与上一步查到的/proc/meminfo中Cached值比对:二者单位一致(均为KB),数值应基本吻合。若free显示的cached明显小于/proc/meminfo的Cached,说明free命令做了内部过滤或版本差异,此时以/proc/meminfo为准。
注意:free命令的cached字段不包含SReclaimable,而/proc/meminfo的Cached包含——这是常见误解源头。不要用free的cached直接当作Page Cache真实值。
计算纯Page Cache近似值(推荐方法)
第一步:提取Cached与Shmem数值
执行:awk '/^Cached:/ {cached=$2} /^Shmem:/ {shmem=$2} END {print "Pure Page Cache ≈", cached-shmem, "KB"}' /proc/meminfo
第二步:换算为MB便于阅读
执行:awk '/^Cached:/ {c=$2} /^Shmem:/ {s=$2} END {printf "%.0f MB\n", (c-s)/1024}' /proc/meminfo
这一步结果就是当前系统中由普通文件读写产生的、可被内核立即回收的Page Cache净用量。它不包含tmpfs、ramfs、图形缓冲区或驱动私有映射——这些都属于不可回收或非Page Cache范畴。
若该值超过物理内存的40%且MemAvailable持续低于1GB,说明Page Cache已挤压可用内存空间,可能触发交换或OOM;此时可结合echo 3 > /proc/sys/vm/drop_caches临时释放(仅限调试,生产环境慎用)。











