`
jahu
  • 浏览: 60873 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

(转)关于Linux的缓存内存 Cache Memory详解

 
阅读更多

前天有朋友问我,为啥我的Linux系统没运行多少程序,显示的可用内存这么少?

其实Linux与Win的内存管理不同,会尽量缓存内存以提高读写性能,通常叫做Cache Memory。有时候你会发现没有什么程序在运行,但是使用top或free命令看到可用内存free项会很少,此时查看系统的 /proc/meminfo 文件,会发现有一项 Cached Memory:

输入cat /proc/meminfo查看:

MemTotal: 16425996 kB
MemFree: 5698808 kB
Buffers: 380904 kB
Cached: 9389356 kB
SwapCached: 212 kB
Active: 6569200 kB
Inactive: 3725364 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 16425996 kB
LowFree: 5698808 kB
SwapTotal: 8273464 kB
SwapFree: 8273252 kB
Dirty: 980 kB
Writeback: 0 kB
AnonPages: 524108 kB
Mapped: 24568 kB
Slab: 381776 kB
PageTables: 7496 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 16486460 kB
Committed_AS: 2143856 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 267656 kB
VmallocChunk: 34359469303 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB

free命令里各项内存指标说明:


total used free shared buffers cached
Mem: 16425996 10727220 5698776 0 380904 9389832
-/+ buffers/cache: 956484 15469512
Swap: 8273464 212 8273252

其中第一行用全局角度描述系统使用的内存状况:
total——总物理内存
used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存
free——完全未被使用的内存
shared——应用程序共享内存
buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)
cached——缓存,用于已打开的文件
总结:
total=used+free
used=buffers+cached (maybe add shared also)

第二行描述应用程序的内存使用:
前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值
后个值表示+buffers/cache——所有可供应用程序使用的内存大小,free加上缓存值
总结: 
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached

第三行表示swap的使用:
used——已使用
free——未使用

什么是Cache Memory(缓存内存):

当你读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。

其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有内存可用。如果你希望手动去释放Cache Memory也是有办法的。

如何释放Cache Memory(缓存内存):

用下面的命令可以释放Cache Memory:

To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

注意,释放前最好sync一下,防止丢失数据。

总结:个人经验认为没必要手动释放,这种内存管理方式也是比win优胜的地方之一!因为Linux的内核内存管理机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以提高文件以及磁盘的读写速度。

分享到:
评论

相关推荐

    Linux-定期清内存缓存-shell脚本

    ### Linux-定期清内存缓存-shell脚本 #### 背景与意义 在Linux系统中,内存资源的管理非常重要。随着系统运行时间的增长,内存中的缓存数据可能会占用大量空间,导致可用内存减少,从而影响系统的性能。为了确保...

    mmu和cache详解

    内存管理单元(Memory Management Unit,MMU)是计算机系统中的关键组件,负责在处理器和主存之间提供虚拟地址到物理地址的映射。它的主要职责包括: 1. **地址转换**:MMU接收处理器生成的虚拟地址,并将其转换为...

    MMU与CACHE详解

    在计算机体系结构中,MMU(Memory Management Unit,内存管理单元)和Cache是两个关键组件,它们对于CPU高效地访问内存起着至关重要的作用。本文将详细介绍这两个概念,以及它们在ARM920T处理器中的应用。 首先,...

    Linux内存管理详解学习教案.pptx

    Linux内存管理的层次结构复杂,从页表管理到缺页异常处理,涉及多层调用,如do_page_fault处理缺页异常,通过kmem_cache_create和kmem_cache_alloc进行缓存分配,以及通过kmalloc、slab分配器等进行内存分配。内存...

    ARM之MMU与CACHE详解

    ARM处理器中的MMU(Memory Management Unit,内存管理单元)和Cache是一种复杂的技术,它们之间紧密地相互关联,共同实现了虚拟内存管理和高速缓存机制。在本文中,我们将详细地介绍ARM处理器中的MMU和Cache的原理和...

    Linux内存管理详解PPT学习教案.pptx

    在Linux内核中,`kmem_cache_create`和`kmem_cache_alloc`用于创建和分配缓存,`sys_brk`和`vmalloc`分别处理堆空间和非连续内存的需求,而`do_page_fault`则用于处理缺页异常。 伙伴系统的工作原理是将空闲内存块...

    CPU Cache and Memory Ordering(修改版)

    ### CPU缓存与内存排序详解 #### CPU架构与缓存机制概述 在现代计算机系统中,CPU(中央处理器)的设计和优化对整个系统的性能有着决定性的影响。其中一个关键的方面是**缓存机制**(Cache Mechanism),它通过...

    Memory System- Cache, DRAM, Disk

    ### 计算机存储系统详解:缓存(Cache)、动态随机存取内存(DRAM)与磁盘(Disk) #### 引言 《Memory Systems: Cache, DRAM, Disk》一书是关于现代计算机存储体系架构的经典之作。本书不仅深入浅出地介绍了计算机存储...

    MMU与CACHE详解.pdf

    ### MMU与CACHE详解 #### 一、MMU与虚拟内存管理 MMU(Memory Management Unit,内存管理单元)在现代计算机系统中扮演着至关重要的角色。它负责将程序使用的虚拟地址转换为实际的物理地址,这一过程被称为地址...

    详解php 缓存技术

    3. 内存缓存(Memory Cache):如APC(Alternative PHP Cache)、OPcache(PHP自带的Opcode缓存),它们将编译后的PHP代码存储在内存中,加快代码执行速度。 4. 对象缓存(Object Cache):如PHP的PDO_Memcached扩展...

    Memcache与微软缓存

    **Memcache与微软缓存详解** 在IT领域,缓存技术是提高系统性能和响应速度的关键工具。Memcache和微软缓存(也称为System.Runtime.Caching)是两种常见的缓存解决方案,尤其在Web应用程序中被广泛应用。让我们深入...

    linux memory barrier

    ### Linux Memory Barrier原理详解 #### 一、Memory Barrier概述 在多处理器系统(SMP)中,内存访问顺序和同步成为影响程序正确性和性能的关键因素。Linux 内核中的 Memory Barrier(内存屏障)机制用于控制...

    内存、堆栈详解

    ### 内存、堆栈详解 #### 一、内存分配器(Memory Allocator) 内存分配器是计算机程序中负责管理内存分配的重要组件。在本节中,我们将深入探讨内存分配器的工作原理及其在Go语言中的具体实现。 ##### 1.1 基于...

    Memory Management in Linux

    ### Linux中的内存管理详解 #### 引言 在操作系统领域,Linux因其卓越的稳定性和灵活性而备受推崇。其中,内存管理作为系统的核心组件之一,负责有效地分配和回收内存资源,确保进程间的隔离与数据安全。《Linux...

    Linux 内存管理导读-三级页表-伙伴系统

    ### Linux内存管理详解:三级页表与伙伴系统 #### 存储层次结构及原因 Linux内存管理系统的设计基于存储层次的概念,这一概念强调了不同类型的存储介质(如高速缓存、主存、磁盘等)之间的关系及其对于整体系统...

    老二牛车教育NET程序员面试题之Cache试题

    2. System.Runtime.Caching.MemoryCache:这是.NET Framework 4.0及更高版本中引入的,适用于非Web应用程序,提供了一种跨平台的缓存解决方案。 三、Cache的工作原理 Cache通常遵循LRU(Least Recently Used)策略...

    缓存框架-Ehcache学习笔记

    - **Memory Store**: 内存存储,这是缓存的主要存储区域,速度快但容量有限。 - **Disk Store**: 磁盘存储,当内存存储满时,Ehcache 可以将数据溢出到硬盘上。 - **Terracotta Distributed Cache**: 当需要在多台...

Global site tag (gtag.js) - Google Analytics