1、内存映射
将虚拟内存地址映射到物理内存地址。为了完成内存映射,内核为每个进程读维护了一张表,记录虚拟地址与物理地址的映射关系
内存空间查看
free工具
$ free total used free shared buff/cache available Mem: 8169348 263524 6875352 668 1030472 7611064 Swap: 0 0 0
可以看共输出两行六列信息,第一行是物理内存Mem使用情况,第二行是交换分区swap的使用情况
六列的含义为:
- total是总内存大小
- used是已使用内存的大小,包含了共享内存
- free是未使用的内存大小
- shared是共享内存的大小
- buff/cache是缓存和缓冲区的大小
available是新进程可用内存的大小。available不仅包含未使用内存,还包括可回收的缓存。
buffer和cache
buff是内核缓冲区用到的内存,对应的是/proc/meminfo中的buffers值,buffers是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大
- cache是内核页缓存和slab用到的内存,对应的是/proc/meminfo中的cached与SReclaimable之和。cached是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据;SReclaimable是Slab的一部分,Slab包括两部分,其中的可回收部分用SReclaimable记录,不可回收部分用SUnreclaim记录
top工具
$ top
…
KiB Mem : 8169348 total, 6871440 free, 267096 used, 1030812 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7607492 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
430 root 19 -1 122360 35588 23748 S 0.0 0.4 0:32.17 systemd-journal
1075 root 20 0 771860 22744 11368 S 0.0 0.3 0:38.89 snapd
1048 root 20 0 170904 17292 9488 S 0.0 0.2 0:00.24 networkd-dispat
1 root 20 0 78020 9156 6644 S 0.0 0.1 0:22.92 systemd
12376 azure 20 0 76632 7456 6420 S 0.0 0.1 0:00.01 systemd
12374 root 20 0 107984 7312 6304 S 0.0 0.1 0:00.00 sshd
…
输出结果顶端是系统整体的内存使用情况。下面的信息解释为: