Linux性能学习(2.1):内存_查看系统内存以及Buffer Cached说明

Posted Stoneshen1211

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux性能学习(2.1):内存_查看系统内存以及Buffer Cached说明相关的知识,希望对你有一定的参考价值。

文章目录


简单介绍下如何查看系统/进程内存相关参数以及各个参数的含义。

1 使用free查看

# free
              total        used        free      shared  buff/cache   available
Mem:        3073552      834428      281744        9872     1957380     1994584
Swap:       7902204         780     7901424

total表示总内存大小,其总大小为total=used+free+buff/cache;
used表示已经使用的内存大小,包含了共享内存;
free表示未使用内存的大小;
shared表示共享内存的大小,主要是被tmpfs使用;
buff/cache表示缓存和缓冲区的大小;
available表示新进程可用内存大小,包含了未使用内存、页面缓存等。

2 使用top查看

# top
top - 15:27:24 up 1 day,  1:27,  4 users,  load average: 0.00, 0.01, 0.00
Tasks: 229 total,   1 running, 187 sleeping,   0 stopped,   1 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3073552 total,   263760 free,   847120 used,  1962672 buff/cache
KiB Swap:  7902204 total,  7901424 free,      780 used.  1981520 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND               
 1166 root      20   0  171092   8468   7504 S   0.3  0.3   2:29.86 vmtoolsd              
 8023 root      20   0       0      0      0 I   0.3  0.0   0:24.49 kworker/1:1           
 8635 root      20   0       0      0      0 I   0.3  0.0   0:01.09 kworker/0:2           
 8845 root      20   0   43692   4040   3444 R   0.3  0.1   0:00.02 top   

在top顶端的total、free、used、buff/cache等字段和上面使用free展示的字段含义一样。而下面的VIRT、RES、SHR、%MEM则是每个进程的内存相关参数。

VIRT单位为KiB,表示当前进程使用的虚拟内存的总量,包含代码、数据、库、申请的内存等,如果申请了内存,不管是否真正使用,则按照申请的内存计算;

RES单位为KiB,表示常驻内存,即使用的物理内存大小,不包括swap,包含了其它进程的共享内存,如果申请了内存,只计算真正使用的内存;

SHR单位为KiB,表示共享内存,除了自身进程的共享内存,也包含其它进程的共享内存
PS:如果要计算某个进程的所占的物理内存,使用RES-SHR即可。

%MEM, RES占物理内存的百分比。

3 Buffer与Cached

Buffer与Cached作用是改善系统的I/O吞吐能力,提高了系统的性能。

Cached(缓存),从磁盘读取文件的页缓存,即将从文件中读取的数据保存在高速缓存中,在重新读取时,如果缓存中有需要的数据,就不用从硬盘中读取文件了,若没有找就从硬盘中读取;同时也是写磁盘文件的页缓存。

所谓的页缓存,即系统为了提高文件读写效率,内核会以页大小为单位,将文件划分很多数据块,当用户对文件的某个数据块进行读写时候,内核就会申请一个内存页(页缓存)与文件中的数据块进行绑定。这样的话,如果读操作,存在页缓存,则将页缓存的数据拷贝给CPU,如果不存在,则申请页缓存,同时将数据读到页缓存,然后把页缓存的数据拷贝给CPU;如果写操作,如果要写入的数据所在的页缓存已经存在,那么就会写入页缓存,如果不存在,则申请页缓存,将数据从文件读到页缓存,并将新修改数据写入页缓存,然后等待内核同步机制或手动sync的方式将页缓存的数据写入磁盘。

Buffers(缓冲),缓存磁盘的数据,将分散的读写操作集中进行操作,减少实际的I/O次数。因为是临时存储I/O设备数据,如果在读之前(即已经读到buffer之中,用户还没有对buffer数据进行处理),清内存可能会造成读失败;如果在写入I/O设备之前清内存,则会导致数据丢失。

以上是关于Linux性能学习(2.1):内存_查看系统内存以及Buffer Cached说明的主要内容,如果未能解决你的问题,请参考以下文章

Linux性能学习(2.2):内存_进程线程内存分配机制探究

Linux之系统性能优化

Linux 学习总结(二十三)系统管理技巧2

linux命令学习— sar 命令学习

Linux性能学习(2.3):内存_为什么分配的内存比申请的内存大16个字节

Linux性能学习(1.4):CPU_如何查看CPU上下文切换参数