1、内存映射

将虚拟内存地址映射到物理内存地址。为了完成内存映射,内核为每个进程读维护了一张表,记录虚拟地址与物理地址的映射关系
image.png

内存空间查看

只要有free、top和ps等工具

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

输出结果顶端是系统整体的内存使用情况。下面的信息解释为:

  • VIRT是进程虚拟内存大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内
  • RES是常驻内存的大小,也就是进程实际使用的物理内存大小,但不包括swap和共享内存
  • SHR是共享内存的大小
  • %MEM是进程使用物理内存站系统总内存的百分比