linux内存管理及手动释放机制

inux系统中查看内存状态一般都会用到free

linux的free命令中,cached和buffers的区别

Free

Mem:表示物理内存统计

  -/+ buffers/cached:表示物理内存的缓存统计

  Swap:表示硬盘上交换分区的使用情况

  系统的总物理内存:8098060 8Gb,但系统当前真正可用的内存并不是第一行free 标记的6054972Kb,它仅代表未被分配的内存。

  我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。

  total:表示物理内存总量。

  used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。

  free:未被分配的内存。

  shared:共享内存,一般系统不会用到,这里也不讨论。

  buffers:系统分配但未被使用的buffers 数量。

  cached:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。

note:

total=used+free

used=buffers+cached (maybe add shared also)

buffer 与cache 的区别

A buffer is something that has yet to be
"written" to disk. A cache is something that has been "read" from the
disk and stored for later use.

对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。

cache 和 buffer的区别:

 Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1
Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2
Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。

  Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

  Free中的buffer和cache:(它们都是占用内存):

  buffer : 作为buffer cache的内存,是块设备的读写缓冲区

  cache: 作为page cache的内存, 文件系统的cache

  如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小

内存释放机制

关于drop_caches的官方说明如下:

Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to becomefree.

To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;

to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;

to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.

Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:

#cat /proc/sys/vm/drop_caches

0

首先,/proc/sys/vm/drop_caches的值,默认为0

手动执行sync命令

描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件

#sync

#echo 3 > /proc/sys/vm/drop_caches

#cat /proc/sys/vm/drop_caches

3

将/proc/sys/vm/drop_caches值设为3

再次执行free查看内存已释放完毕。

时间: 2024-12-11 01:51:31

linux内存管理及手动释放机制的相关文章

linux内存管理概述

其中介绍了虚拟内存的机制以及mmap系统调用的实现.mmap允许直接将设备内存映射到用户进程的地址空间中.物理内存的管理,包括缓存的分配及回收,请页机制,交换空间等. 1)交换模块(swap) 这个模块负责控制内存内容的换入换出,它通过替换机制,使得物理内存的页框(RAM页)中保留有效的逻辑页,即从主存中淘汰最近没被访问的逻辑页,保存近来访问过的逻辑页.该模块实现的源程序分别是: page_io.c的主要函数功能是读写交换文件. swap_state.c的主要函数功能是修改交换高速缓存(swap

Linux内存管理机制

一.首先大概了解一下计算机CPU.Cache.内存.硬盘之间的关系及区别. 1.  CPU也称为中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路, 是一台计算机的运算核心(Core)和控制核心( Control Unit).它的功能主要是解释计算机指令以及处理计算机软件中的数据.中央处理器主要由三核心部件组成,运算器.控制器和总线(BUS),运算器又主要由算术逻辑单元(ALU)和寄存器(RS)组成. 2.Cache即高速缓冲存储器,是位于CPU与主内存

浅谈Linux内存管理机制

经常遇到一些刚接触Linux的新手会问内存占用怎么那么多? 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这方面,区别于Windows的内存管理.主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能.而Windows是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间.换句话说,每增加一

Linux内存管理机制简介

在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,区别于 Windows的内存管理. 主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能.而Windows 是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间.换句话说,Linux自身的预分配内存机制使得主机上的物理内存会全部被用上.每增加一

【研究任务】linux内存管理机制——内核空间

Linux内存中线性地址为4G,0~3G为用户空间,3~4G为内核空间 一.      内核空间 内核空间是3~4G的内存地址,主要用来存储高优先级的代码 在X86结构中的内核地址存在三种类型的区域: ZONE_DMA     内存开始的16m ZONE_NORMAL       16m~896m ZONE_HIGHMEM    896M~ ZONE_DMA是DMA使用的页(DMA是直接路径访问,不经过cpu缓存而直接访问内存)ZONE_NORMAL是正常可寻址的页.ZONE_HIGHMEM是动

Linux内存管理3---分页机制

1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本文将主要以X86架构为例来介绍Linux内存管理的分页机制. 2.分页机制 5. Linux中的汇编 6.Linux系统地址映射示例

Linux内存管理2---段机制

1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本文将主要以X86架构为例来介绍Linux内存管理的段机制. 2.段机制 段是虚拟地址空间的基本单位 段机制必须把虚拟地址空间的一个地址转换为线性地址空间的一个线性地址 可以从三个方面来描述段(如下图) 段的基地址(Base):在线性地址空间中段的起始地址: 段的界限(Limit):在虚拟地址空间中,

[转帖]Linux分页机制之分页机制的演变--Linux内存管理(七)

Linux分页机制之分页机制的演变--Linux内存管理(七) 2016年09月01日 20:01:31 JeanCheng 阅读数:4543 https://blog.csdn.net/gatieme/article/details/52402967 ~ 版权声明:本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme https://blog.csdn.net/gatieme/article/details/52402967 日期 内核版

linux内存管理

一.Linux 进程在内存中的数据结构 一个可执行程序在存储(没有调入内存)时分为代码段,数据段,未初始化数据段三部分:    1) 代码段:存放CPU执行的机器指令.通常代码区是共享的,即其它执行程序可调用它.假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段.     2) 数据段:存放已初始化的全局变量.静态变量(包括全局和局部的).常量.static全局变量和static函数只能在当前文件中被调用.     3) 未初始化数据区(uninitializeddata s