怎么找出Linux内存瓶颈

在linux/unix系统中,内存到底够不够用?应用/进程使用了多少内存?本文希望能给出一些的建议能够有所帮助 。
我们经常使用free命令来观察获取内存使用情况 。

怎么找出Linux内存瓶颈

文章插图
 
free 输出的是一个表格,其中的数值都默认以字节为单位 。表格总共有两行七列,这两行分别是物理内存 Mem 和交换分区 Swap 的使用情况.而七列中,每列数据的含义分别为:
第一列,total 是总内存大小;
第二列,used 是已使用内存的大小,包含了共享内存;
第三列,free 是未使用内存的大小;
第四列,shared 是共享内存的大小;
第五列,buffers 是缓存的大小;
第六列,cache是缓冲区的大小;
最后一列,available 是新进程可用内存的大小 。
那么buffers/cached又是什么意思呢?
Buffer,是指buffer cache,是缓冲区用到的内存,是对block设备的数据缓冲,用来存储磁盘数据,对应的是 /proc/meminfo 中的 Buffers 值 。
Cache,是指page cache,是页缓存和 Slab 用到的内存,从磁盘读取文件的页缓存,用来缓存从文件读取的数据 。对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和 。
我们也经常使用ps和top来获取内存数据和进程的内存性能数据 。top命令中VIRT、RES、SHR和%MEM的含义
VIRT 是进程虚拟内存的大小 。只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内 。
RES 是已分配使用的物理内存的大小,但不包括 Swap 和共享内存 。
SHR 是共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等 。
【怎么找出Linux内存瓶颈】%MEM 是进程使用物理内存占系统总内存的百分比 。
那么如何获取一个进程内存使用情况呢,linux通过proc文件系统为每个进程的内存信息都记录在/proc//smaps文件中 。在smaps文件中,每一条记录(如下图2所示)表示进程虚拟内存空间中一块连续的区域 。文件解读如下:
怎么找出Linux内存瓶颈

文章插图
 
希望以上能够对Linux内存的指标有更清晰的了解,对度量和分析系统内存,业务/进程使用内存进行进一步更深入的分析 。




    推荐阅读