0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux内存机制:手动释放Swap、Buffer和Cache

如意 来源:民工哥技术之路 作者:Darren_Wen 2020-08-13 14:59 次阅读

一、什么是linux的内存机制?

我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。

物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。

作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。

Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。

要深入了解linux内存运行机制,需要知道下面提到的几个方面:

Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。

Linux 进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟 内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需 要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面 文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不 用担心什么,只要知道是怎么一回事就可以了。

交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页 面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致linux出现假死机、服务异常等问题,linux虽 然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。

因此,合理规划和设计Linux内存的使用,是非常重要的。

在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写 数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。然而,如果有大量数据需要从磁盘读取到内存或者由内存写入磁盘时,系统的读写性 能就变得非常低下,因为无论是从磁盘读数据,还是写数据到磁盘,都是一个很消耗时间和资源的过程,在这种情况下,Linux引入了buffers和 cached机制。

buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件属性信息,这样当操作系统需要读取某些文件时,会首先在buffers 与cached内存区查找,如果找到,直接读出传送给应用程序,如果没有找到需要数据,才从磁盘读取,这就是操作系统的缓存机制,通过缓存,大大提高了操 作系统的性能。但buffers与cached缓冲的内容却是不同的。

buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及 tracking in-flight pages,而cached是用来给文件做缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆我们打开过的文件和程序。

为了验证我们的结论是否正确,可以通过vi打开一个非常大的文件,看看cached的变化,然后再次vi这个文件,感觉一下两次打开的速度有何异同,是不是第二次打开的速度明显快于第一次呢?接着执行下面的命令:

find / -name .conf看看buffers的值是否变化,然后重复执行find命令,看看两次显示速度有何不同。

二、linux什么时候开始使用虚拟内存(swap)?

[root@wenwen ~]# cat /proc/sys/vm/swappiness 60

上面这个60代表物理内存在使用40%的时候才会使用swap(参考网络资料:当剩余物理内存低于40%(40=100-60)时,开始使用交换空间)swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性。

通常情况下:swap分区设置建议是内存的两倍 (内存小于等于4G时),如果内存大于4G,swap只要比内存大就行。另外尽量的将swappiness调低,这样系统的性能会更好。

B.修改swappiness参数

Linux内存机制:手动释放Swap、Buffer和Cache

立即生效,重启也可以生效。

三、怎么释放内存?

一般系统是不会自动释放内存的关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

0 – 不释放

1 – 释放页缓存

2 – 释放dentries和inodes

3 – 释放所有缓存

实操:

很明显多出来很多空闲的内存了吧

四、怎么释放swap?

前提:首先要保证内存剩余要大于等于swap使用量,否则会宕机!根据内存机制,swap分区一旦释放,所有存放在swap分区的文件都会转存到物理内存上。通常通过重新挂载swap分区完成释放swap。

a.查看当前swap分区挂载在哪?b.关停这个分区c.查看状态:d.查看swap分区是否关停,最下面一行显示全e.将swap挂载到/dev/sda5上f.查看挂载是否成功

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206733
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72761
  • SWAP
    +关注

    关注

    0

    文章

    47

    浏览量

    12636
  • 虚拟机
    +关注

    关注

    1

    文章

    855

    浏览量

    27373
  • 华秋DFM
    +关注

    关注

    20

    文章

    3483

    浏览量

    3907
收藏 人收藏

    评论

    相关推荐

    深入理解Java 8内存管理机制及故障排查实战指南

    Java的自动内存管理机制是由 JVM 中的垃圾收集器来实现的,垃圾收集器会定期扫描堆内存中的对象,检测并清除不再使用的对象,以释放内存资源
    的头像 发表于 04-04 08:10 551次阅读
    深入理解Java 8<b class='flag-5'>内存</b>管理<b class='flag-5'>机制</b>及故障排查实战指南

    深入理解Linux RCU:从硬件说起之内存屏障

    上一篇文章我们谈到了内存Cache,并且描述了典型的Cache一致性协议MESI。Cache的根本目的,是解决内存与CPU速度多达两个数量级
    的头像 发表于 12-25 13:42 487次阅读
    深入理解<b class='flag-5'>Linux</b> RCU:从硬件说起之<b class='flag-5'>内存</b>屏障

    buffercache的区别

    buffercache的区别 缓冲区(Buffer)和缓存(Cache)是计算机系统中用于提高数据读写效率的两个关键概念,它们虽然功能有所重叠,但在实际应用中存在一些差异。在下文中,
    的头像 发表于 12-07 11:00 417次阅读

    linux手动设置网络参数

    Linux 是一种广泛使用的操作系统,提供了丰富的网络配置选项,允许用户手动设置网络参数,以满足各种网络需求。本文将详尽、详实、细致地介绍 Linux手动设置网络参数的方法,包括
    的头像 发表于 11-27 15:20 313次阅读

    如何在linux系统配置交换分区(swap)呢?

    SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中
    的头像 发表于 11-14 09:57 567次阅读
    如何在<b class='flag-5'>linux</b>系统配置交换分区(<b class='flag-5'>swap</b>)呢?

    Linux 内存管理总结

    、缓存、交换分区等。Linux内存管理的目标是最大限度地利用可用内存,同时保证系统的稳定和可靠性。 1.1 什么是内存管理 内存管理是计算机
    的头像 发表于 11-10 14:58 240次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>内存</b>管理总结

    memset会导致一大块内存cache吗?

    在 Arm 体系结构中,我们知道大多数的 normal memory 的配置都是 write allocation 和 read allocation 的,即当写一块内存或读一块内存的时候,如果 miss 了,那么会将该物理内存
    的头像 发表于 11-07 16:00 209次阅读

    freertos怎么释放任务的内存空间?

    freertos怎么释放任务的内存空间
    发表于 10-12 07:20

    Linux性能优化:Cache对性能的影响

    Cache对性能的影响首先我们要知道,CPU访问内存时,不是直接去访问内存的,而是先访问缓存(cache)。 当缓存中已经有了我们要的数据时,CPU就会直接从缓存中读数据,而不是从
    的头像 发表于 10-04 15:31 469次阅读
    <b class='flag-5'>Linux</b>性能优化:<b class='flag-5'>Cache</b>对性能的影响

    free在释放内存的时候,为什么不需要指定内存的大小?

    malloc在申请内存的时候,需要指定内存的大小,申请成功则返回这块内存的地址,但是free的时候,只需要指定释放内存的起始地址,系统就知
    的头像 发表于 09-15 17:05 990次阅读
    free在<b class='flag-5'>释放</b><b class='flag-5'>内存</b>的时候,为什么不需要指定<b class='flag-5'>内存</b>的大小?

    OTA的swap Bank AB升级方案

    首先要评估flash够不够,如果flash都不够,就无从SWAP机制可谈。
    的头像 发表于 08-19 14:41 1049次阅读
    OTA的<b class='flag-5'>swap</b> Bank AB升级方案

    linux常用命令大全新手入门

    cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提
    发表于 07-31 11:09 373次阅读

    Linux内存相关知识科普

    Linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。**从内存的原理和结构,到内存
    发表于 07-25 14:43 551次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内存</b>相关知识科普

    Linux内存管理的详细介绍分享

    内存管理是计算机系统中负责管理系统内存资源的一种机制,主要包括内存分配、内存释放
    的头像 发表于 05-29 14:09 1398次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内存</b>管理的详细介绍分享

    Cache验证参考模型对比来谈复杂度权衡

    总体而言,在验证L1 cache system (L1SYS)的过程中,L1SYS的机构被拆分为多个模块,包括shadow command buffer, store buffer, sram
    的头像 发表于 04-28 09:25 755次阅读
    从<b class='flag-5'>Cache</b>验证参考模型对比来谈复杂度权衡