linux系统与进程内存使用情况探测

linux系统与进程内存使用情况探测

系统内存探测

内核态使用内存分析

  • 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.sold-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 |
+---------------------------------------------------------------------+----------------+------------+-----------+---------+
相关推荐
LucaJu3 小时前
Java + EasyExcel 实现单个接口导出多个Excel
java·excel
大卡片3 小时前
linux库的制作
linux
橘子编程3 小时前
密码学完全指南:从基础到实战
java·python·密码学
Harvy_没救了3 小时前
【Linux】循环语句
linux·运维
小比特_蓝光3 小时前
Linux----进程概念
linux·运维·服务器
大卡片3 小时前
Linux进程基础
linux·运维·服务器
.柒宇.3 小时前
docker容器技术实战
运维·docker·容器
J2虾虾3 小时前
使用Idea当Jar包的反编译
java·intellij-idea·jar
优化Henry3 小时前
LTE-TDD小区光路闪断故障处理典型案例
运维·网络·5g·信息与通信