首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内存回收和交换

前言 Linux的swap相关部分代码从2.6早期版本到现在的4.6版本在细节之处已经有不少变化。本文讨论的swap基于Linux 4.4内核代码。...Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。希望本文能让读者了解Linux对swap的使用大概是什么样子。...在Linux上可以使用swapon -s命令查看当前系统上正在使用的交换空间有哪些,以及相关信息: [zorro@zorrozou-pc0 linux-4.4]$ swapon -s Filename...那么如何描述内存使用的压力呢?Linux内核使用水位标记(watermark)的概念来描述这个压力情况。Linux内存的使用设置了三种内存水位标记,high、low、min。...不是的,关闭swap要使用swapoff命令。swappiness只是在内存发生回收操作的时候用来平衡cache回收和swap交换的一个参数,调整为0意味着,尽量通过清缓存来回收内存

4.6K52

图解 | Linux内存回收之LRU算法

如下图所示: 但内存资源是有限的,随着系统中运行的进程越来越多,系统中可用的内存就会越来越少。那么,当可用内存不足时,Linux 内核是怎么处理的呢?...内存回收工作主要包括以下几个步骤: 内核为了加速某些操作(如文件 I/O),会对操作的结果进行缓存(如文件页缓存),而缓存使用的内存是可以被回收的。所以,当可用内存不足时,首先会回收内核中的缓存。...由于回收内存的方式有三种,所以本文重点以 swap 机制作为分析对象,来介绍当内存不足时,内核是怎么进行内存回收工作的。...LRU算法状态流转 我们最后以一张状态流转图来描述 LRU 算法的过程: 三、总结 本文主要介绍了 Linux 内核内存回收过程中使用的 LRU 算法的原理,在下一篇文章中,我们将会介绍 Linux...内核是如何实现内存回收的,有兴趣的敬请期待。

2.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

聊聊Linux内核的内存回收上篇

概述 内存回收是把已经使用过的的物理页帧重新放回到内核中的buddy系统(buddy系统用于申请空闲物理页帧的子系统)管理中,解决内存紧张的问题;内存回收的页帧包括未修改的文件页帧、修改且完成同步的文件页帧...内核对所有用户态进程消耗的RAW内存总量不做严格的约束,当系统负载相对较低的时候,内存大部分被磁盘高速缓存使用,随着系统负载增大,系统进程使用的内存越来越多,磁盘的高速缓存占用的内存就会被缩小,内存页帧的回收必须在消耗所有空闲页帧之前进行...slab分配器在频繁申请和释放的情况下效率比较高 基于LRU页帧链表 内存页帧是有映射的,映射到一个或者多个进程的虚拟空间。内核一般用内存页帧的引用次数来表示页帧的活跃程度。...页帧回收会按照几个原则来进行内存页帧的回收,第一是回收高速磁盘缓存的页帧;第二回收睡眠时间较长的进程中的页帧;第三是回收共享页帧的引用全部清除;第四回收LRU链表中未使用的 页帧回收的过程页分为直接回收和定期回收...直接回收是发生在分配页帧时候发现空闲页帧不足的情况下。直接回收和定期回收底层都是走相同的逻辑,但是直接回收是实在紧急情况下进行,必须做到回收到足够的页帧。

1.7K30

内存回收

前言: 前文《内存映射技术分析》描述了虚拟内存的管理、内存映射;《物理内存管理》介绍了物理内存管理。 本篇介绍一下内存回收内存回收应该是整个Linux内存管理上最难理解的部分了。...2,watermark 如前文《物理内存管理》提到,每个memory zone都有watermark,如果低于了watermark,Linux就考虑回收内存了。...10,lru list 内存回收lru选择那些内存需要回收。 敲命令cat /proc/meminfo: ?...只是说,如果内存不够了,linux会尝试回收,尽量满足。 回收的时候,如果实在回收不到了,linux会选择最差的策略---杀掉一部分进程。...后记: 虚拟内存的管理,内存映射,物理内存管理,内存回收,差不多就是Linux内存管理的主要功能了。 Good Luck~

3.2K100

Redis内存回收策略

Redis会因为内存不足而产生错误,也会因为回收过久而导致系统长期的停顿,因此了解掌握Redis的回收策略十分重要。...当Redis的内存达到规定的最大值时,可以进行配置进行淘汰键值,并且将一些键值对进行回收。 我们打开Redis安装目录下的redis.conf文件。...noeviction:不淘汰任何键值对,当内存满时,如果进行读操作,例如get命令,它将正常工作,而做写操作,它将返回错误,也就是说,当Redis采用这个策略内存达到最大的时候,它就只能读不能写了。...回收超时策略的缺点是必须指明超时的键值对,这会给程序开发带来一些设置超时的代码,增加刘开发者的工作量。对所有的键值对进行回收,有可能把正在使用的键值对删掉,增加了存储的不稳定性。...对于垃圾回收的策略,还需要控制回收的时间。

2.4K20

Linux 内存中的Cache,真的能被回收么?

您真的了解Linux的free命令么? 在Linux系统中,我们经常用free命令来查看系统内存的使用状态。...这个命令几乎是每一个使用过Linux的人必会的命令,但越是这样的命令,似乎真正明白的人越少(我是说比例越少)。 一般情况下,对此命令输出的理解可以分这几个层次: 不了解。...在Linux内存管理中,这里的buffer指Linux内存的:Buffer cache。这里的cache指Linux内存中的:Page cache。翻译成中文可以叫做缓冲区缓存和页面缓存。...如何回收cache? Linux内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。 一般情况下,这个操作中主要的内存释放都来自于对buffer/cache的释放。...我们可以人工触发内存回收看看现在到底能回收多少内存: 可以看到,cached占用的空间并没有像我们想象的那样完全被释放,其中13G的空间仍然被/tmp/tmpfs中的文件占用的。

2.5K110

Linux 内存中的 Cache 真的能被回收么?

Linux 系统中,我们经常用 free 命令来查看系统内存的使用状态。...这个命令几乎是每一个使用过 Linux 的人必会的命令,但越是这样的命令,似乎真正明白的人越少(我是说比例越少)。一般情况下,对此命令输出的理解可以分这几个层次: 1、不了解。...在 Linux内存管理中,这里的buffer 指 Linux 内存的:Buffer cache。这里的 cache 指 Linux 内存中的:Page cache。...如何回收 cache? Linux 内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。...我们可以人工触发内存回收看看现在到底能回收多少内存: 可以看到,cached 占用的空间并没有像我们想象的那样完全被释放,其中 13G 的空间仍然被 /tmp/tmpfs 中的文件占用的。

5.2K50

Linux进程内存分析pmap命令

名称:        pmap - report memory map of a process(查看进程的内存映像信息)pmap命令用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。...映像支持文件,[anon]为已分配内存 [stack]为程序堆栈         Offset:  offset into the file  文件偏移         Device:  device...writeable/private: 276K    shared: 0K [root@C44 ~]#   最后一行的值 mapped 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小...,即ps出的vsz writeable/private  表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小       shared 表示进程和其他进程共享的内存大小 查看进程

3.7K10

Linux监控内存free命令详解

free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。...,buffer/cached会很快地被回收。...使用free命令 将used的值减去   buffer和cache的值就是你当前真实内存使用 ————– 对操作系统来讲是Mem的参数.buffers/cached 都是属于被使用,所以它认为free...所以,以应用来看看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家 一些常识.Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计,...的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.所以我们看linux,只要不用swap的交换 空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux

1.4K10

php内存泄漏,内存溢出,垃圾回收

当一个 php-fpm 进程被销毁后,它所占用的所有内存都会被回收。 垃圾回收 一、概念 垃圾回收机制是一种动态存储分配的方案。它会自动释放程序不再需要的已分配的内存块。...垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。...即: 每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器+1; 当变量引用撤掉后(执行unset()后),计数器-1; 当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成...但是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露的现象。...php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以避免内存泄露。

3.2K20

weakSet与js内存回收

$ node --expose-gc index.js // 第一次垃圾回收,当前内存使用情况:1.76MB // 第二次垃圾回收,当前内存使用情况:18.54MB // 第三次垃圾回收,当前内存使用情况...toFixed(2)}MB`); }, 100) // 结果 // 第一次垃圾回收,当前内存使用情况:1.77MB // 第二次垃圾回收,当前内存使用情况:18.54MB // 第三次垃圾回收,当前内存使用情况...:18.54MB // 第N次垃圾回收,当前内存使用情况:18.55MB // ... // 第N次垃圾回收,当前内存使用情况:2.00MB // 第N次垃圾回收,当前内存使用情况:2.01MB ---...,当前内存使用情况:1.76MB // 第二次垃圾回收,当前内存使用情况:18.54MB, // 当前Map的长度: 1 // 第三次垃圾回收,当前内存使用情况:18.54MB, // 当前Map...的长度: 1 // 第四次垃圾回收,当前内存使用情况:1.94MB, // 当前Map的长度: 0 附录 使用 node 命令执行js的时候加入 –expose-gc参数的作用 --expose-gc

1.3K20

Go 内存管理 -- 垃圾回收

本篇要说的就是垃圾回收,常见的垃圾回收算法有标记-清除、标记整理、复制,然后在这些算法基础上有分为分代&非分代回收,这些算法都非常优秀,只是面对的场景不同罢了,但是要是想透彻的理解垃圾回收,看Java中的实现再合适不过了...,如果能对于Java中的垃圾回收非常熟悉,理解go的垃圾回收将非常简单。...image.png 很显然如果使用标记清除算法: 1、确定标记的起点GCRoot 2、存在一定的内存碎片 3、效率相对于复制、整理 效率要稍微高一些 但标记清除是最常见的垃圾回收算法,Java...强制回收 因为系统启动或者短时间内大量分配对象这些原因,会将垃圾回收的gc_trigger(垃圾回收的触发器)的标准瞬间推高。当服务正常后,活跃对象远小于这个阈值,造成垃圾回收无法触发。...关于整体回收这一块儿内容,大家有兴趣可以看一下源码。 关于go的垃圾回收暂时就先介绍这么多。 关于go的内存管理后续会单独出一个系列,所以本系列仅仅阐述了一个内存管理的梗概和基础概念。

95041

JVM内存分配与回收

1.3 长期存活的对象将进入老年代 既然虚拟机采用了分代收集的思想来管理内存,那么内存回收时就必须能识别那些对象应放在新生代,那些对象应放在老年代中。...它可以将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉。这样就使每次的内存回收都是对内存区间的一半进行回收。...3.3 标记-整理算法 根据老年代的特点特出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一段移动,然后直接清理掉端边界以外的内存。...4.垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较,但并非为了挑选出一个最好的收集器。...这种使用Region划分内存空间以及有优先级的区域回收方式,保证了GF收集器在有限时间内可以尽可能高的收集效率。

1.5K20

Linux手动清除内存命令的方法

Linux手动清除缓存的方法 Linux长时间使用会导致cache缓存占用过大,甚至拖累CPU的使用率,可以通过命令手动释放Linux内存,详细教程如下: 一:先查看下当前Linux内存占用情况 命令...一般我们清理Linux缓存主要是清理buff/cache占用的内存资源。...二:执行sync命令 命令:sync 执行sync命令是为了确保文件系统的完整性,手动执行sync命令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。...三:执行清除Linux缓存命令 命令:echo 3 > /proc/sys/vm/drop_caches /proc是一个虚拟文件系统,通过对它的读写操作做为与kernel实体间进行通信的一种手段。...所以,我们通过调整/proc/sys/vm/drop_caches来释放内存。 综上,3条命令即可清除Linux缓存释放内存

6.4K30
领券