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):内存_进程线程内存分配机制探究