Linux内存-内存类型

Linux 内存类型分为

  • VIRT 虚拟内存(Virtual Memory) : 逻辑意义上的内存空间概念,程序申请内存的大小,并非是真实物理内存
  • RES 驻留内存(Resident Memory):真实占用物理内存的大小,包含SHR,但不包含SWAP
  • SHR 共享内存(Share Memory): 进程间共享的物理内存。另外,进程独占物理内存 = RES - SHR
  • SWAP 交换空间 : 是在磁盘中开辟的内存空间

单个进程使用内存简介

进程使用内存,需要先申请再使用,其中使用大小可以小于申请大小,如:进程A 申请 10 MB 的内存,但实际只使用了 5 MB

RES

驻留内存,其值是指物理内存,是程序在物理内存中驻留的大小,不包括SWAP交换空间的内存,所以并不一定是程序真实占用的内存。举个例子,进程A 申请 10 MB 的内存,但实际只使用了 5 MB,但是 RES 可能只有 4 MB, 还有 1 MB 放到交换空间里了。

VIRT

虚拟内存是一个逻辑意义上的内存概念。表示进程 “需要的” 虚拟内存大小,包括进程使用的库、代码、数据等。假如进程申请 10MB 的内存,但实际只使用了 5MB,那么它会增长 10MB,而不是实际的使用量

  • 为什么是说逻辑上的呢? 为什么说是虚拟呢?

    因为它不止包括真实的物理内存,还包括在磁盘中虚拟出来的内存空间,这片虚拟出来的内存并非常规意义上的物理内存,因此只是称之为逻辑意义上的内存,也就是虚拟内存。

  • 那为什么要在磁盘中虚拟出一片内存来呢?

    当然是为了解决物理内存不足而设计的,专门开辟出来的这片磁盘内存叫做 SWAP(交换空间)

  • 所以进程的虚拟内存时,包括 3 部分

    1. 占用的物理内存,也就是驻留内存-RES
    2. 缓存在交换空间的外存
    3. 申请的内存中,还未使用到的部分

SWAP

从上面的讲述中,我们知道了,SWAP 为交换空间,是专门在磁盘中开辟出的一片空间,为弥补物理内存不足而设计的。

  • 进程在什么时机会使用交换空间?

    在物理内存不够时,会使用交换空间,这与 系统配置 /proc/sys/vm/swappiness 有关,Ubuntu 默认配置都是 60, 表示当物理内存剩余 60% 时,使用交换空间

    • vm.swappiness = 0: 表示尽量不使用 SWAP,当物理内存用完时才会使用 SWAP
    • vm.swappiness = 100: 表示尽量使用 SWAP
  • 如何设置 vm.swappiness 为 0 ?
    • 临时设置
      echo 0 > /proc/sys/vm/swappiness
      或
      sysctl vm.swappiness=0
      
    • 永久设置
      • 配置
      echo "vm.swappiness=0" >> /etc/sysctl.conf
      
      • 生效
      sysctl -p
      

参考