首页 > 系统相关 >Linux系统的内存摘要

Linux系统的内存摘要

时间:2023-05-10 10:02:49浏览次数:46  
标签:缓存 Cache 摘要 cache 内存 Linux CPU buffers

通过free -m 查看系统内存使用情况

  • total:总内存大小。
  • used:已经使用的内存大小(这里面包含cached和buffers和shared部分)。
  • free:空闲的内存大小。
  • shared:进程间共享内存(一般不会用,可以忽略)。
  • buffers:内存中写完的东西缓存起来,这样快速响应请求,后面数据再定期刷到磁盘上。
  • cached:内存中读完缓存起来内容占的大小(这部分是为了下次查询时快速返回)。
-/+ buffers/cache看做两部分
  • -buffers/cache:正在使用的内存大小(注意不是used部分,因为buffers和cached并不是正在使用的,组织和人民需要是它们是可以释放的),其值=used-buffers-cached。
  • ``+buffers/cache`:可用的内存大小(同理也不是free表示的部分),其值=free+buffers+cached。
  • Swap:硬盘上交换分区的使用大小。
设计的目的就是当上面提到的+buffers/cache表示的可用内存都已使用完,新的读写请求过来后,会把内存中的部分数据写入磁盘,从而把磁盘的部分空间当做虚拟内存来使用。  

Buffer和Cache介绍

Cache(缓存),为了调高CPU和内存之间数据交换而设计,Buffer(缓冲)为了提高内存和硬盘(或其他I/O设备的数据交换而设计)。 Cache主要是针对读操作设计的,不过Cache概念可能容易混淆,我理解为CPU本身就有Cache,包括一级缓存、二级缓存、三级缓存,我们知道CPU所有的指令操作对接的都是内存,而CPU的处理能力远高于内存速度,所以为了不让CPU资源闲置,Intel等公司在CPU内部集成了一些Cache,但毕竟不能放太多电路在里面,所以这部分Cache并不是很大,主要是用来存放一些常用的指令和常用数据,真正大部分Cache的数据应该是占用内存的空间来缓存请求过的数据,即上面的Cached部分(这部分纯属个人理解,正确与否有待考证)。 Buffer主要是针对写操作设计的,更细的说是针对内存和硬盘之间的写操作来设计的,目的是将写的操作集中起来进行,减少磁盘碎片和硬盘反复寻址过程,提高性能。 在Linux系统内部有一个守护进程会定期清空Buffer中的内容,将其写入硬盘内,当手动执行sync命令时也会触发上述操作。 常见症状 症状一:在Linux中频繁存取文件,物理内存很快用光,而cached一直在增长。 解释:Linux会对每次请求过的数据缓存在cache里,好处就是CPU的处理速度远远高于内存,所以在CPU和内存通讯的时候可以快速从cache中命中结果返回。 症状二:Swap被占用。 解释:内存可能不够了,才会占Swap,所以Swap可以作为服务器监控的一项指标,引起注意。  

清理缓存

# 将所有未写的系统缓冲区写到磁盘中
sudo sync;sync;sync   
#延迟5秒
sleep 5  
# 释放页缓存
sudo echo 1 > /proc/sys/vm/drop_caches
# 释放dentries和inodes
sudo echo 2 > /proc/sys/vm/drop_caches
# 释放所有缓存
sudo echo 3 > /proc/sys/vm/drop_caches

  

注:echo 3 时若系统需要,释放完缓存还需执行 echo 0

 

不达成功誓不休。坚其志,苦其心,劳其力,事无大小,必有所成。

标签:缓存,Cache,摘要,cache,内存,Linux,CPU,buffers
From: https://www.cnblogs.com/muyi-yang/p/17387085.html

相关文章

  • Qt开发-共享内存使用范例,配合开发者密钥使用后台调试程序或者进入调试模式
    共享内存就之前不是开发了一个Leventure_DeveloperKey用以调试程序嘛,在这里简单聊一下调试模式的方案。这里的调试分为了两种,一种是调试模式,一种是开发者模式。需要这两种模式的原因也很简单:1.在远程调试的时候,我可能需要程序从头开始进入调试,这就要求程序一直卡在开头的某个位......
  • Java获取当前路径(Linux+Windows)
    Java获取当前路径(Linux+Windows)获取当前路径(兼容Linux、Windows):StringcurPath=System.getProperty("user.dir");log.info("===========当前路径===========curPath:{}",curPath);输出结果:===========当前路径===========curPath:/home/lizhm......
  • Linux的这七大认识误区,你千万别有!
    本文罗列了大家对Linux的七大认识误区,看看其中那个是你也出现过的。千万别让这些先入为主的观点断送了你体验新事物的机会。Linux的受众群体并不大。对还是错?错!大错而特错。我承认,Linux的实际用户数量很难统计,因为其免费开放下载且并未由单一企业进行控制。没有明确的销......
  • Linux的这七大认识误区,你千万别有!
    本文罗列了大家对Linux的七大认识误区,看看其中那个是你也出现过的。千万别让这些先入为主的观点断送了你体验新事物的机会。Linux的受众群体并不大。对还是错?错!大错而特错。我承认,Linux的实际用户数量很难统计,因为其免费开放下载且并未由单一企业进行控制。没有明确的销......
  • Linux的这七大认识误区,你千万别有!
    本文罗列了大家对Linux的七大认识误区,看看其中那个是你也出现过的。千万别让这些先入为主的观点断送了你体验新事物的机会。Linux的受众群体并不大。对还是错?错!大错而特错。我承认,Linux的实际用户数量很难统计,因为其免费开放下载且并未由单一企业进行控制。没有明确的销......
  • Linux的开发环境
    Linux的开发环境通常会包括以下方面:1.编程语言解释器或编译器:例如Python、Java、C++等等。2.集成开发环境(IDE):例如Eclipse、NetBeans、VisualStudioCode等等。3.版本控制系统:例如Git或SVN。4.构建工具:例如Maven或Gradle。5.调试器:例如gdb、valgrind等等。6.数据库:......
  • linux静态库的制作及问题解决
       首先介绍下分文件,在学习或者开发中,实现一个项目需要实现很多的功能,那么这些功能不可能在一个".c"文件下实现,需要多个".c"文件来共同实现,但是程序的入口只有一个,就体现了分文件编程的重要性,在主函数中调用其余的功能函数。分文件编程的优点及意义就是:分模块编程思......
  • [Linux]折腾备忘录
    在vi~/.bashrcsource~/.bashrc 添加 exportHOSTIP=$(cat/etc/resolv.conf|grep"nameserver"|cut-f2-d"")exporthttp_proxy="http://$HOSTIP:7890"exporthttps_proxy="http://$HOSTIP:7890"exportall_pro......
  • linux之docker安装RocketMQ
    一、创建namesrv容器dockerpullrocketmqinc/rocketmqmkdir-p/docker/rocketmq/data/namesrv/logs/docker/rocketmq/data/namesrv/storedockerrun-d\--restart=always\--namermqnamesrv\-p9876:9876\-v/docker/rocketmq/data/namesrv/logs:/root/lo......
  • 内存映射文件
    内存映射文件1、传统的文件访问方式2、内存映射文件知识回顾......