Linux 内存管理 VI

内存统计是资源评估的重要方面,本文从进程和系统两个视角讨论smem和free两个常用的内存统计工具,Linux进程虚拟地址空间和物理内存的关系如下。

进程视角

进程内存消耗通常使用VSS、RSS、PSS、USS来表征,需要注意的是,进程的这些指标的统计是不包括内核地址空间的。
VSS = 1 + 2 + 3 virtual set size,进程的虚拟地址空间都是通过 task_struct->mm_struct ->mmap->vm_area_struct 来管理其虚拟地址空间,每一个VMA都对应一个Section,所有的VMA对应到进程的内存消5就是VSS,以下两点需要注意:

  1. VSS不是真的体现进程物理内存的消耗,而是虚拟地址空间的消耗。
  2. 对于共享库来说,代码段只有一份,数据段是数据调用进程的,每个进程一份

可以通过如下方式查看VSS(VSZ字段)


$ps aux|more
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 185552  5512 ?        Ss   2月16   0:01 /sbin/init noprompt persistent splash
root         2  0.0  0.0      0     0 ?        S    2月16   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    2月16   0:01 [ksoftirqd/0]

RSS = 4 + 5 + 6,resident set size,只进程实际占用的内存,对于Lib,其所占内存完整的体现在每一个调用的进程RSS中
PSS = 4/3 + 5/2 + 6, proportional set size,同样是体现进程实际占用的内存,不同是对于多进程公共的Lib,按照比例将其占用内存摊派到每一个进程的PSS中
USS = 6 unique set size ,进程独占的内存,比如进程的Heap,分析内存泄漏时通常使用USS。
可以通过如下方式查看USS、PSS、RSS,smem工具通过读取**/proc//smaps和maps**两个文件整理输入如下。


$smem -P ^chromium
  PID User     Command                         Swap      USS      PSS      RSS 
16317 jiang    /usr/lib/chromium-browser/c        0      164     2022    13764

系统视角


$smem
  PID User     Command                         Swap      USS      PSS      RSS 
 3173 jiang    /bin/sh -c /usr/lib/x86_64-        0       92      100     1496 
 7228 jiang    /usr/lib/vmware/bin/thnucln        0       64      187     1600

smem还可以生成图像化界面


$smem --pie=command

$smem --bar=command


除了smem,借助**/proc/meminfo**的free也是常用的内存统计工具

$free
              total        used        free      shared  buff/cache   available
Mem:       20441288     3178084      620712    11664236    16642492     5170568
Swap:      12463100        4748    12458352

在不使用选项的情况下,free输出的单位是KB,used表示系统已经使用的内存,包含其后的buffers和cached的内存,buffers/cached是Page Cache的两种形式,buffers指缓存了裸设备的Page Cache,cached指缓存的文件数据的Page Cache,二者都是Page Cache,只是缓存的background不同。在Ubuntu 16.04使用的free已经将二者合一,并加入了一个系统评估的可供应用程序使用的内存: available,这个参数综合考虑了空闲内存和可轻易释放出的内存等因素。

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.