当前位置: 首页 > news >正文

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

文章目录

  • 1 使用free查看
  • 2 使用top查看
  • 3 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设备之前清内存,则会导致数据丢失。

相关文章:

  • Connext DDS开发指南(5)基本QoS策略
  • MoCoViT: Mobile Convolutional Vision Transformer
  • Harbor安装
  • leetcode解题思路分析(一百三十六)1158 - 1169 题
  • @EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)
  • Java接口:概述、多实现、多继承、JDK8后接口新增方法
  • 【Java基础】010 -- Java基础综合练习
  • Cesium 和 webgl 加载各类型模型说明
  • 微服务项目(01)
  • 【git】使用技巧
  • Python爬虫(6)-selenium用requests、wget、urllib3这3种方法搞定图片和PDF文件下载
  • 【python学习笔记】:方便好用的自动化脚本
  • 如何使用Python中处理word文档的模块—docx模块
  • 【Python语言基础】——Python 文件处理
  • Go性能调优及相关工具使用(四)——性能调优工具pprof的使用
  • SRE:如何提高报警有效性?
  • C生万物 | 窥探数组设计的种种陷阱
  • git解决代码冲突问题
  • DefTet
  • 单片机阻塞延时与非阻塞延时(1)
  • 《微信小程序案例9》小程序登录流程
  • UNI-APP安卓本地打包详细教程(保姆级)
  • Flutter 实现你所谓的弹窗 (对话框)
  • uniapp实现公众号H5、小程序和App微信授权登录功能
  • Android 控件描边、加阴影
  • 收藏这份Android Framework开发入门指南,带你步入Android系统开发的殿堂
  • Swift5中String、数组相互转换
  • 一次搞懂Java如何调用Kotlin的高级特性
  • Mac使用Python接入东方财富量化接口Choice,调试与获取数据
  • Android Bluetooth(一)——蓝牙的开启和搜索