怎么找出Linux内存瓶颈

7450阅读 0评论2018-12-26 dbwatcher
分类:LINUX

博客文章除注明转载外,均为原创。转载请注明出处。

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

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 是共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等。
    ? %MEM 是进程使用物理内存占系统总内存的百分比。

那么如何获取一个进程内存使用情况呢,linux通过proc文件系统为每个进程的内存信息都记录在/proc//smaps文件中。在smaps文件中,每一条记录(如下图2所示)表示进程虚拟内存空间中一块连续的区域。文件解读如下:


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

--The end
上一篇:理解CPU上下文切换
下一篇:手动处理Oracle备库无法同步主库新加数据文件