linux系统与进程内存使用情况探测
- 系统内存探测
- 进程内存探测
-
- 进程内存空间布局
- 查看进程虚拟地址空间
- [cat /proc/pid/smaps可查看更多的细节。](#cat /proc/pid/smaps可查看更多的细节。)
- [cat /proc/pid/status 可查看统计情况](#cat /proc/pid/status 可查看统计情况)
- [cat /proc/pid/maps](#cat /proc/pid/maps)
- cache缓存中文件探测
系统内存探测
内核态使用内存分析
- PageTables页表大小。内核为所有进程分配页表映射所占用的空间大小。
- KernelStack 内核栈占用的大小。
- slab 内核数据结构缓存总量。内核对相同大小的数据结构会放在一起存储。
- Percpu 给cpu分配的私有内存。
- VmallocUsed vmalloc 区域已用内存。
- buffers 块设备I/O缓冲区缓存,可部分回收。
- cache 文件内容的页缓存,包含可回收部分。
- Active(file): 热文件缓存。
- Inactive(file): 冷文件缓存,可优先回收。
用户态使用内存分析
- AnonPages 堆上分配的匿名内存。
- Mapped mmap文件映射使用的内存,主要是共项库。
- shmem 共享内存大小,包括tmpfs、共享内存段。
/proc/meminfo详细数据解析
- MemTotal: 2006412 kB 总内存大小。
- MemFree: 170572 kB 未分配的内存大小。
- MemAvailable: 652148 kB 未分配空间+可回收内存如缓存。
- Buffers: 54416 kB 块设备I/O缓冲区缓存。
- Cached: 266748 kB 文件内容的页缓存,包含可回收部分。
- SwapCached: 2200 kB 从swap空间重新刷回内存的空间大小。
- Active: 794072 kB 最近被访问的内存页,内存紧张时不会被优先换出。
- Inactive: 445268 kB 较长时间未访问的内存页,优先被换出。
- Active(anon): 676100 kB 最近访问页中包含的匿名页。
- Inactive(anon): 297176 kB 较长事件未访问的页中包含的匿名页。
- Active(file): 117972 kB 最近访问页中包含的文件映射页。
- Inactive(file): 148092 kB 较长事件未访问的页中包含的文件映射页。
- Unevictable: 8196 kB 代表不能换到交换分区的内存页。
- Mlocked: 80 kB 通过mlock锁定不能换到交换分区的页面。
- SwapTotal: 4192252 kB 交换分区大小。
- SwapFree: 4183232 kB 交换分区剩余空间大小。
- Zswap: 0 kB 使用内存压缩技术,被压缩的内存占用的空间。
- Zswapped: 0 kB 被压缩的内存原始占用的空间。
- Dirty: 0 kB 需要回写入磁盘的页面大小。
- Writeback: 0 kB 正在回写入磁盘的页面大小。
- AnonPages: 911876 kB 匿名页大小。
- Mapped: 120016 kB 文件映射空间大小。
- Shmem: 55360 kB 共享内存大小。
- KReclaimable: 403400 kB 内核可回收空间大小。
- Slab: 505536 kB 内核数据结构占空间大小。
- SReclaimable: 403400 kB 内核数据结构可回收空间大小。
- SUnreclaim: 102136 kB 内核数据结构不可回收空间大小。
- KernelStack: 7216 kB 内核栈总大小。
- PageTables: 26308 kB 页面占用空间大小。
- SecPageTables: 0 kB 内核为IOMMU 和 KVM 这两种虚拟化技术分配的内存。
- NFS_Unstable: 0 kB 表示那些已发送给NFS服务器、但尚未被确认收到的空间。
- Bounce: 0 kB 即"弹跳缓冲",是内存中用于某些老旧设备DMA操作的临时缓冲区。在现代服务器上通常为0
- WritebackTmp: 0 kB 由FUSE(用户态文件系统)子系统使用的"临时写回"缓冲区大小。主要用于网络文件系统或非标准文件系统,普通系统下通常为0
- CommitLimit: 5195456 kB 根据 vm.overcommit_ratio 等内核参数计算出的理论总内存承诺上限,超过该值新申请可能失败。
- Committed_AS: 3497940 kB 所有进程已承诺的虚拟内存总量。
- VmallocTotal: 34359738367 kB vmalloc 区域的总虚拟地址空间大小。
- VmallocUsed: 23072 kB malloc 区域已使用的虚拟内存大小。
- VmallocChunk: 0 kB vmalloc 地址空间中,最大的连续空闲块大小。
- Percpu: 2528 kB 为系统中每个CPU分配的数据副本所占用的总内存大小。
- HardwareCorrupted: 0 kB 内核检测到的损坏物理内存总量。
- AnonHugePages: 122880 kB 为匿名内存(如进程的堆/栈)映射的透明大页总大小。
- ShmemHugePages: 0 kB 为共享内存分配,并"正在使用"的透明大页总大小。
- ShmemPmdMapped: 0 kB 共享内存的透明大页中,已建立PMD映射(被进程页表引用)的总大小。
- FileHugePages: 0 kB 为文件页分配的透明大页总大小。
- FilePmdMapped: 0 kB 文件页的透明大页中,已建立PMD映射的总大小。
- Unaccepted: 0 kB 用于某些虚拟化平台(如Intel TDX)的内存热插拔场景。
- HugePages_Total: 0 系统传统大页池中的总大页数量。
- HugePages_Free: 0 大页池中未被任何进程使用的大页数量。
- HugePages_Rsvd: 0 已被进程承诺预留、但尚未实际分配的大页数量。
- HugePages_Surp: 0 系统中超出 /proc/sys/vm/nr_hugepages 设置的"超额"大页数量。
- Hugepagesize: 2048 kB 系统中默认大页的大小。
- Hugetlb: 0 kB 系统中所有大小的大页消耗的总物理内存。
- DirectMap4k: 207040 kB 内核线性映射区中,使用 4KB 标准页映射的内存量。
- DirectMap2M: 1875968 kB 内核线性映射区中,使用 2MB 大页映射的内存量。
进程内存探测
进程内存空间布局
一个 Linux 进程在运行时的虚拟内存空间布局,可以看作是一个精心划分的"地址地图"。这张地图告诉操作系统,每个地址范围对应什么内容(代码、数据、堆、栈、共享库等)。理解这个布局是进行程序调试、内存分析和安全研究的基础。

程序编译完成后会分成各种段分开存储。
- 代码段 (Text Segment)。 存放 CPU 执行的指令。只读 + 执行(r-x),防止程序意外修改自身指令。如果可执行文件是 PIE(位置无关可执行文件),加载基址会随机化,不会从0开始。
- 只读数据段 (ROData)。存放字符串字面量、const 修饰的全局变量等。只读(r--),修改会触发段错误。
- Data:已初始化的全局/静态变量,其初值存储在可执行文件中。
- BSS:未初始化的全局/静态变量,程序加载时由内核清零,不占用磁盘空间。
- 堆 (Heap)。从低地址向高地址增长。通过 brk/sbrk 系统调用扩展大小,通常用于 malloc 分配小对象。如果 malloc 分配大块内存(超过 MMAP_THRESHOLD,默认128KB),会直接使用 mmap 分配独立区域(位于内存映射区)。
- 内存映射区域 (Memory Mapping Segment)。
- 动态链接的共享库(如 libc.so、ld-linux.so)。
- 通过 mmap 映射的普通文件(如数据库文件、日志文件)。
- 通过 mmap 分配的匿名内存(MAP_ANONYMOUS),例如大 malloc、线程栈。
- 动态生成的线程,其线程栈也在该区域分配。线程栈一般为8M。
- 每个映射有独立的权限(r--, rw-, r-x 等)。
- 栈 (Stack)。主线程栈空间。
- 存放函数调用帧、局部变量、函数参数、返回地址。
- 从高地址向低地址增长。
- 栈大小有限(默认8MB),超过会引发栈溢出(Segmentation fault)。
- 非主线程也有自己的独立栈(分配在内存映射区)。
- 内核空间。
- 用户态进程无法直接访问。
- 系统调用时,CPU 切换到内核态,可访问内核空间。
查看进程虚拟地址空间
使用 pmap -x pid可以查看进程的虚拟机地址分布情况。

cat /proc/pid/smaps可查看更多的细节。
bash
mroot@dayou:/work# cat /proc/1/smaps |more
5624e58e7000-5624e58ef000 r--p 00000000 08:0a 830980 /usr/lib/systemd/systemd
Size: 32 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 0 kB
Pss: 0 kB
Pss_Dirty: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
KSM: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd mr mw me sd
5624e58ef000-5624e58fd000 r-xp 00008000 08:0a 830980 /usr/lib/systemd/systemd
Size: 56 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 0 kB
Pss: 0 kB
Pss_Dirty: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
KSM: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd ex mr mw me sd
cat /proc/pid/status 可查看统计情况
bash
root@dayou:/work# cat /proc/1/status
Name: systemd
Umask: 0000
State: S (sleeping)
Tgid: 1
Ngid: 0
Pid: 1
PPid: 0
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups:
NStgid: 1
NSpid: 1
NSpgid: 1
NSsid: 1
Kthread: 0
VmPeak: 31620 kB
VmSize: 24576 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 20260 kB
VmRSS: 12568 kB
RssAnon: 4884 kB
RssFile: 7684 kB
RssShmem: 0 kB
VmData: 3968 kB
VmStk: 132 kB
VmExe: 56 kB
VmLib: 12100 kB
VmPTE: 88 kB
VmSwap: 4 kB
HugetlbPages: 0 kB
CoreDumping: 0
THP_enabled: 1
untag_mask: 0xffffffffffffffff
Threads: 1
SigQ: 1/7497
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 7fefc1fe28014a03
SigIgn: 0000000000001000
SigCgt: 00000000000004ec
CapInh: 0000000000000000
CapPrm: 000001ffffffffff
CapEff: 000001ffffffffff
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
NoNewPrivs: 0
Seccomp: 0
Seccomp_filters: 0
Speculation_Store_Bypass: not vulnerable
SpeculationIndirectBranch: not affected
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 18954
nonvoluntary_ctxt_switches: 1888
x86_Thread_features:
x86_Thread_features_locked:
- 进程基础信息
- name: 进程名。
- Umask 进程的文件模式创建屏蔽字,影响新建文件/目录的默认权限。
- State 进程的当前状态
- Tgid 线程组ID,主进程的PID,同一线程组内的所有线程共享该ID。
- Ngid 线程组ID(容器内) 通常为0。
- Pid 进程ID 当前进程/线程的唯一标识。
- PPid 父进程ID 创建当前进程的父进程PID。
- TracerPid 追踪者PID 如果被调试(如 gdb 或 strace 附加),这里显示调试器PID;否则为0。
- Uid / Gid 身份凭证,按顺序为:Real (真实), Effective (有效), Saved Set (保存), File System (文件系统) 的ID。
- kthread 是否为内核线程。
- 进程内存与地址空间
- VmPeak 虚拟内存使用量的历史峰值。
- VmSize 当前虚拟内存总大小 (VSS)。
- VmLck 被锁定的物理内存大小。
- VmPin 被固定的内存页大小 与 VmLck 类似,用于特殊驱动场景。
- VmHWM 常驻内存 (RSS) 的历史峰值,反映进程曾达到的物理内存占用高峰。
- VmRSS 当前常驻物理内存大小 (RSS)。
- RssAnon RSS 中的匿名页大小 进程私有的堆、栈,是内存开销的主要部分。
- RssFile RSS 中的文件页大小 映射的文件(如代码、共享库)占用的内存。
- RssShmem RSS 中的共享内存大小 tmpfs、shmget 等占用的内存。
- VmData 数据段大小 包括堆、已初始化/未初始化全局变量。
- VmStk 栈大小 通常很小(132KB)。
- VmExe 代码段大小 可执行程序的机器指令大小。
- VmLib 共享库代码段大小 被使用的动态库的代码总大小。
- VmPTE 页表占用的内存大小 进程页表自身的内存开销。
- VmSwap 已使用的交换空间大小 进程被换出到swap的内存总量,越大说明物理内存越紧张。
- HugetlbPages 大页使用量 使用大页(Hugepage)的内存大小。
- 线程与调度
- threads : 线程数,包括主线程在内的所有线程总数。
- SigQ 队列中的信号数 待处理信号数/总限制。
- SigPnd / ShdPnd 信号位掩码 分别表示线程和进程级别待处理的信号。
- SigBlk / SigIgn / SigCgt 信号掩码 分别表示阻塞、忽略和捕获的信号。
- CapInh / CapPrm / ... 能力集 (Capabilities) 细粒度的权限控制,如CAP_NET_ADMIN。
- NoNewPrivs 安全标志 通常为0,为1时进程不能获得新权限。
- Seccomp / Seccomp_filters 安全计算模式 进程启用的seccomp过滤器数量。
- Cpus_allowed CPU亲和性掩码 进程可在哪些CPU上运行(位掩码)。
- cpus_allowed_list CPU亲和性列表
- Mems_allowed / Mems_allowed_list NUMA内存节点亲和性 进程可在哪些NUMA节点上分配内存。
- voluntary_ctxt_switches 主动上下文切换次数 进程主动让出CPU的次数(如等待I/O)。
- nonvoluntary_ctxt_switches 非主动上下文切换次数 进程时间片耗尽被内核抢占的次数。
cat /proc/pid/maps
进程的maps文件也暴露了一些信息。如1号进程信息如下:
bash
oot@zhongsc-ThinkPad-P51:/home/zhongsc/桌面# cat /proc/1/maps
595a96243000-595a9624b000 r--p 00000000 08:06 1062794 /usr/lib/systemd/systemd
595a9624b000-595a9625b000 r-xp 00008000 08:06 1062794 /usr/lib/systemd/systemd
595a9625b000-595a96263000 r--p 00018000 08:06 1062794 /usr/lib/systemd/systemd
595a96263000-595a96265000 r--p 00020000 08:06 1062794 /usr/lib/systemd/systemd
595a96265000-595a96266000 rw-p 00022000 08:06 1062794 /usr/lib/systemd/systemd
595ac6bf4000-595ac7157000 rw-p 00000000 00:00 0 [heap]
7502f7800000-7502f78e4000 r--p 00000000 08:06 1064124 /usr/lib/x86_64-linux-gnu/libcrypto.so.3
7502f78e4000-7502f7c77000 r-xp 000e4000 08:06 1064124 /usr/lib/x86_64-linux-gnu/libcrypto.so.3
7502f7c77000-7502f7d96000 r--p 00477000 08:06 1064124 /usr/lib/x86_64-linux-gnu/libcrypto.so.3
7502f7d96000-7502f7e13000 r--p 00596000 08:06 1064124 /usr/lib/x86_64-linux-gnu/libcrypto.so.3
7502f7e13000-7502f7e16000 rw-p 00613000 08:06 1064124 /usr/lib/x86_64-linux-gnu/libcrypto.so.3
7502f7e16000-7502f7e19000 rw-p 00000000 00:00 0
7502f7f9a000-7502f7f9d000 r--p 00000000 08:06 1064037 /usr/lib/x86_64-linux-gnu/libaudit.so.1.0.0
7502f7f9d000-7502f7faa000 r-xp 00003000 08:06 1064037 /usr/lib/x86_64-linux-gnu/libaudit.so.1.0.0
7502f7faa000-7502f7fc4000 r--p 00010000 08:06 1064037 /usr/lib/x86_64-linux-gnu/libaudit.so.1.0.0
7502f7fc4000-7502f7fc5000 r--p 0002a000 08:06 1064037 /usr/lib/x86_64-linux-gnu/libaudit.so.1.0.0
7502f7fc5000-7502f7fc6000 rw-p 0002b000 08:06 1064037 /usr/lib/x86_64-linux-gnu/libaudit.so.1.0.0
7502f7fc6000-7502f7fd2000 rw-p 00000000 00:00 0
7502f7fd2000-7502f7fd5000 r--p 00000000 08:06 1064664 /usr/lib/x86_64-linux-gnu/libseccomp.so.2.6.0
7502f7fd5000-7502f7fe5000 r-xp 00003000 08:06 1064664 /usr/lib/x86_64-linux-gnu/libseccomp.so.2.6.0
7502f7fe5000-7502f7ffe000 r--p 00013000 08:06 1064664 /usr/lib/x86_64-linux-gnu/libseccomp.so.2.6.0
7502f7ffe000-7502f7fff000 r--p 0002c000 08:06 1064664 /usr/lib/x86_64-linux-gnu/libseccomp.so.2.6.0
7502f7fff000-7502f8000000 rw-p 0002d000 08:06 1064664 /usr/lib/x86_64-linux-gnu/libseccomp.so.2.6.0
7502f8000000-7502f8028000 r--p 00000000 08:06 1064083 /usr/lib/x86_64-linux-gnu/libc.so.6
7502f8028000-7502f81c0000 r-xp 00028000 08:06 1064083 /usr/lib/x86_64-linux-gnu/libc.so.6
7502f81c0000-7502f820e000 r--p 001c0000 08:06 1064083 /usr/lib/x86_64-linux-gnu/libc.so.6
7502f820e000-7502f8212000 r--p 0020d000 08:06 1064083 /usr/lib/x86_64-linux-gnu/libc.so.6
7502f8212000-7502f8214000 rw-p 00211000 08:06 1064083 /usr/lib/x86_64-linux-gnu/libc.so.6
7502f8214000-7502f8221000 rw-p 00000000 00:00 0
...
7502f8c8a000-7502f8c8c000 rw-p 00000000 00:00 0
7502f8c8c000-7502f8c8e000 r--p 00000000 08:06 1064123 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7502f8c8e000-7502f8ca6000 r-xp 00002000 08:06 1064123 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7502f8ca6000-7502f8cbf000 r--p 0001a000 08:06 1064123 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7502f8cbf000-7502f8cc0000 r--p 00033000 08:06 1064123 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7502f8cc0000-7502f8cc1000 rw-p 00034000 08:06 1064123 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7502f8cc1000-7502f8cc9000 rw-p 00000000 00:00 0
7502f8cc9000-7502f8cdb000 r--p 00000000 08:06 1064447 /usr/lib/x86_64-linux-gnu/libm.so.6
7502f8cdb000-7502f8d7b000 r-xp 00012000 08:06 1064447 /usr/lib/x86_64-linux-gnu/libm.so.6
7502f8d7b000-7502f8ded000 r--p 000b2000 08:06 1064447 /usr/lib/x86_64-linux-gnu/libm.so.6
7502f8ded000-7502f8dee000 r--p 00123000 08:06 1064447 /usr/lib/x86_64-linux-gnu/libm.so.6
7502f8dee000-7502f8def000 rw-p 00124000 08:06 1064447 /usr/lib/x86_64-linux-gnu/libm.so.6
7502f8dfd000-7502f8dff000 r--p 00000000 08:06 1064097 /usr/lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7502f8dff000-7502f8e02000 r-xp 00002000 08:06 1064097 /usr/lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7502f8e02000-7502f8e03000 r--p 00005000 08:06 1064097 /usr/lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7502f8e03000-7502f8e04000 r--p 00006000 08:06 1064097 /usr/lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7502f8e04000-7502f8e05000 rw-p 00007000 08:06 1064097 /usr/lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7502f8e05000-7502f8e06000 rw-p 00000000 00:00 0
7502f8e06000-7502f8e07000 rw-p 00000000 00:00 0
7502f8e07000-7502f8e09000 rw-p 00000000 00:00 0
7502f8e09000-7502f8e0d000 r--p 00000000 00:00 0 [vvar]
7502f8e0d000-7502f8e0f000 r--p 00000000 00:00 0 [vvar_vclock]
7502f8e0f000-7502f8e11000 r-xp 00000000 00:00 0 [vdso]
7502f8e11000-7502f8e12000 r--p 00000000 08:06 1063874 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7502f8e12000-7502f8e41000 r-xp 00001000 08:06 1063874 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7502f8e41000-7502f8e4c000 r--p 00030000 08:06 1063874 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7502f8e4c000-7502f8e4e000 r--p 0003b000 08:06 1063874 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7502f8e4e000-7502f8e4f000 rw-p 0003d000 08:06 1063874 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7502f8e4f000-7502f8e50000 rw-p 00000000 00:00 0
7ffc3c1ab000-7ffc3c1cc000 rw-p 00000000 00:00 0 [stack]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
-
vvar\] (内核变量):这是一个只读的数据页。内核将一些核心的、变化频繁的变量放在这里,例如当前的时间戳、系统的 jiffies 计数等。用户态代码只需读取这片内存就能获取到准确、最新的内核数据,无需发起系统调用。
-
vdso\] (虚拟动态共享对象):这是一个内核提供的代码库,可以把它想象成一个由内核"自动"加载到每个进程地址空间的特殊 .so 文件。它包含了可以直接在用户态执行的函数,例如 __vdso_gettimeofday。当程序调用 gettimeofday 时,实际执行的是 vdso 中的函数。这个函数不会通过 syscall 指令陷入内核,而是直接读取 \[vvar\] 区域中的数据,经过简单计算后返回。因此,这个操作几乎和调用普通函数一样快。
cache缓存中文件探测
vmtouch
可以使用vmtouch来查看某个文件在cache中缓存的多少,也可以将文件推入缓存等操作。
bash
root@dayou:/home/dayou# vmtouch --help
vmtouch: invalid option -- '-'
vmtouch v1.3.1 - the Virtual Memory Toucher by Doug Hoyte
Portable file system cache diagnostics and control
Usage: vmtouch [OPTIONS] ... FILES OR DIRECTORIES ...
Options:
-t touch pages into memory
-e evict pages from memory
-l lock pages in physical memory with mlock(2)
-L lock pages in physical memory with mlockall(2)
-d daemon mode
-m <size> max file size to touch
-p <range> use the specified portion instead of the entire file
-f follow symbolic links
-F don't crawl different filesystems
-h also count hardlinked copies
-i <pattern> ignores files and directories that match this pattern
-I <pattern> only process files that match this pattern
-b <list file> get files or directories from the list file
-0 in batch mode (-b) separate paths with NUL byte instead of newline
-w wait until all pages are locked (only useful together with -d)
-P <pidfile> write a pidfile (only useful together with -l or -L)
-v verbose
-q quiet
root@dayou:/home/dayou# vmtouch /usr/bin/node
Files: 1
Directories: 0
Resident Pages: 14224/30440 55M/118M 46.7%
Elapsed: 0.00446 seconds
hcache
可以通过hcache工具按大小排列列出cache中的文件
bash
sudo wget https://blog.tag.gg/soft/hcache -O /usr/local/bin/hcache
chmod a+x sudo wget https://blog.tag.gg/soft/hcache -O /usr/local/bin/hcache
hcache -top 50
+---------------------------------------------------------------------+----------------+------------+-----------+---------+
| Name | Size (bytes) | Pages | Cached | Percent |
|---------------------------------------------------------------------+----------------+------------+-----------+---------|
| /usr/bin/node | 124679552 | 30440 | 14224 | 046.728 |
| /usr/lib/x86_64-linux-gnu/libLLVM.so.19.1 | 129673080 | 31659 | 9934 | 031.378 |
| /usr/lib/x86_64-linux-gnu/libime/zh_CN.lm | 25626482 | 6257 | 5683 | 090.826 |
| /usr/lib/x86_64-linux-gnu/libgallium-25.0.7-2.so | 42565904 | 10393 | 2136 | 020.552 |
| /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2417.32 | 8358040 | 2041 | 1531 | 075.012 |
| /var/log/journal/10fd351c4ba04133b49ecd1078286a5e/user-1000.journal | 8388608 | 2048 | 1232 | 060.156 |
| /var/log/journal/10fd351c4ba04133b49ecd1078286a5e/system.journal | 8388608 | 2048 | 1231 | 060.107 |
| /usr/bin/python3.13 | 6828688 | 1668 | 1172 | 070.264 |
| /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc | 19484784 | 4758 | 1160 | 024.380 |
| /var/cache/fontconfig/0bd3dc0958fa2205aaaa8ebb13e2872b-le64.cache-9 | 4452848 | 1088 | 1088 | 100.000 |
| /usr/lib/x86_64-linux-gnu/libcrypto.so.3 | 6513216 | 1591 | 1051 | 066.059 |
| /usr/lib/x86_64-linux-gnu/librsvg-2.so.2.60.0 | 6228448 | 1521 | 991 | 065.155 |
| /usr/lib/x86_64-linux-gnu/systemd/libsystemd-shared-257.so | 4443552 | 1085 | 907 | 083.594 |
| /usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc | 20050760 | 4896 | 903 | 018.444 |
| /usr/sbin/NetworkManager | 3759688 | 918 | 746 | 081.264 |
| /usr/lib/xorg/Xorg | 2625408 | 641 | 538 | 083.931 |
| /usr/lib/x86_64-linux-gnu/libc.so.6 | 1995216 | 488 | 461 | 094.467 |
| /usr/sbin/ModemManager | 2243352 | 548 | 451 | 082.299 |
| /usr/lib/x86_64-linux-gnu/systemd/libsystemd-core-257.so | 2455984 | 600 | 447 | 074.500 |
| /usr/local/bin/hcache | 2542252 | 621 | 425 | 068.438 |
| /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.4 | 2051320 | 501 | 419 | 083.633 |
| /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33 | 2497768 | 610 | 399 | 065.410 |
| /usr/sbin/wpa_supplicant | 3401216 | 831 | 394 | 047.413 |
| /usr/libexec/bluetooth/bluetoothd | 1693224 | 414 | 371 | 089.614 |
| /usr/lib/x86_64-linux-gnu/libavcodec.so.61.19.101 | 16890960 | 4124 | 329 | 007.978 |
| /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 | 1571096 | 384 | 321 | 083.594 |
| /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.4 | 1404320 | 343 | 316 | 092.128 |
| /usr/lib/x86_64-linux-gnu/libnm.so.0.1.0 | 1509832 | 369 | 301 | 081.572 |
| /usr/lib/x86_64-linux-gnu/libgtk-4.so.1.1800.6 | 11050200 | 2698 | 287 | 010.638 |
| /usr/lib/x86_64-linux-gnu/libxapian.so.30.14.1 | 2473472 | 604 | 283 | 046.854 |
| /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0.61020.0 | 1310560 | 320 | 280 | 087.500 |
| /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.14 | 1799256 | 440 | 276 | 062.727 |
| /usr/lib/x86_64-linux-gnu/libicui18n.so.76.1 | 3774800 | 922 | 267 | 028.959 |
| /usr/bin/bash | 1298416 | 317 | 266 | 083.912 |
| /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.5.0 | 1689752 | 413 | 259 | 062.712 |
| /usr/lib/x86_64-linux-gnu/libx265.so.215 | 16888736 | 4124 | 259 | 006.280 |
| /usr/lib/x86_64-linux-gnu/libcairo.so.2.11804.4 | 1362632 | 333 | 255 | 076.577 |
| /usr/libexec/xdg-desktop-portal | 1438568 | 352 | 251 | 071.307 |
| /usr/lib/x86_64-linux-gnu/libsystemd.so.0.40.0 | 1131784 | 277 | 244 | 088.087 |
| /usr/lib/x86_64-linux-gnu/libmm-glib.so.0.11.0 | 1255336 | 307 | 236 | 076.873 |
| /usr/lib/x86_64-linux-gnu/libasound.so.2.0.0 | 1178192 | 288 | 236 | 081.944 |
| /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 | 1342984 | 328 | 235 | 071.646 |
| /usr/lib/x86_64-linux-gnu/libFcitx5Core.so.5.1.12 | 1105248 | 270 | 233 | 086.296 |
| /usr/lib/x86_64-linux-gnu/libgnutls.so.30.40.3 | 2246712 | 549 | 229 | 041.712 |
| /usr/lib/x86_64-linux-gnu/libgdk-3.so.0.2417.32 | 1108440 | 271 | 229 | 084.502 |
| /usr/lib/openssh/sshd-session | 1122368 | 275 | 222 | 080.727 |
| /usr/bin/gnome-keyring-daemon | 1139832 | 279 | 219 | 078.495 |
| /usr/lib/x86_64-linux-gnu/spa-0.2/bluez5/libspa-bluez5.so | 1182472 | 289 | 218 | 075.433 |
| /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1402.0 | 986096 | 241 | 211 | 087.552 |
| /usr/lib/x86_64-linux-gnu/libqmi-glib.so.5.11.0 | 4364200 | 1066 | 203 | 019.043 |
+---------------------------------------------------------------------+----------------+------------+-----------+---------+