转自:http://www.ha97.com/4337.html
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系统中,内存资源的管理非常重要。随着系统运行时间的增长,内存中的缓存数据可能会占用大量空间,导致可用内存减少,从而影响系统的性能。为了确保...
### 计算机存储系统详解:缓存(Cache)、动态随机存取内存(DRAM)与磁盘(Disk) #### 引言 《Memory Systems: Cache, DRAM, Disk》一书是关于现代计算机存储体系架构的经典之作。本书不仅深入浅出地介绍了计算机存储...
内存管理单元(Memory Management Unit,MMU)是计算机系统中的关键组件,负责在处理器和主存之间提供虚拟地址到物理地址的映射。它的主要职责包括: 1. **地址转换**:MMU接收处理器生成的虚拟地址,并将其转换为...
Linux内存管理的层次结构复杂,从页表管理到缺页异常处理,涉及多层调用,如do_page_fault处理缺页异常,通过kmem_cache_create和kmem_cache_alloc进行缓存分配,以及通过kmalloc、slab分配器等进行内存分配。内存...
MMU(Memory Management Unit,内存管理单元)和 Cache 是计算机系统中两个重要的硬件组件,它们在提高系统性能和安全性方面扮演着关键角色。下面是对 MMU 和 Cache 的详细解释。 一、MMU MMU 是一个特殊的硬件...
ARM处理器中的MMU(Memory Management Unit,内存管理单元)和Cache是一种复杂的技术,它们之间紧密地相互关联,共同实现了虚拟内存管理和高速缓存机制。在本文中,我们将详细地介绍ARM处理器中的MMU和Cache的原理和...
在Linux内核中,`kmem_cache_create`和`kmem_cache_alloc`用于创建和分配缓存,`sys_brk`和`vmalloc`分别处理堆空间和非连续内存的需求,而`do_page_fault`则用于处理缺页异常。 伙伴系统的工作原理是将空闲内存块...
### CPU缓存与内存排序详解 #### CPU架构与缓存机制概述 在现代计算机系统中,CPU(中央处理器)的设计和优化对整个系统的性能有着决定性的影响。其中一个关键的方面是**缓存机制**(Cache Mechanism),它通过...
### MMU与CACHE详解 #### 一、MMU与虚拟内存管理 MMU(Memory Management Unit,内存管理单元)在现代计算机系统中扮演着至关重要的角色。它负责将程序使用的虚拟地址转换为实际的物理地址,这一过程被称为地址...
**Memcache与微软缓存详解** 在IT领域,缓存技术是提高系统性能和响应速度的关键工具。Memcache和微软缓存(也称为System.Runtime.Caching)是两种常见的缓存解决方案,尤其在Web应用程序中被广泛应用。让我们深入...
### Linux Memory Barrier原理详解 #### 一、Memory Barrier概述 在多处理器系统(SMP)中,内存访问顺序和同步成为影响程序正确性和性能的关键因素。Linux 内核中的 Memory Barrier(内存屏障)机制用于控制...
3. 内存缓存(Memory Cache):如APC(Alternative PHP Cache)、OPcache(PHP自带的Opcode缓存),它们将编译后的PHP代码存储在内存中,加快代码执行速度。 4. 对象缓存(Object Cache):如PHP的PDO_Memcached扩展...
### 内存、堆栈详解 #### 一、内存分配器(Memory Allocator) 内存分配器是计算机程序中负责管理内存分配的重要组件。在本节中,我们将深入探讨内存分配器的工作原理及其在Go语言中的具体实现。 ##### 1.1 基于...
2. System.Runtime.Caching.MemoryCache:这是.NET Framework 4.0及更高版本中引入的,适用于非Web应用程序,提供了一种跨平台的缓存解决方案。 三、Cache的工作原理 Cache通常遵循LRU(Least Recently Used)策略...
### Linux中的内存管理详解 #### 引言 在操作系统领域,Linux因其卓越的稳定性和灵活性而备受推崇。其中,内存管理作为系统的核心组件之一,负责有效地分配和回收内存资源,确保进程间的隔离与数据安全。《Linux...
- **Memory Store**: 内存存储,这是缓存的主要存储区域,速度快但容量有限。 - **Disk Store**: 磁盘存储,当内存存储满时,Ehcache 可以将数据溢出到硬盘上。 - **Terracotta Distributed Cache**: 当需要在多台...
### Linux内存管理详解:三级页表与伙伴系统 #### 存储层次结构及原因 Linux内存管理系统的设计基于存储层次的概念,这一概念强调了不同类型的存储介质(如高速缓存、主存、磁盘等)之间的关系及其对于整体系统...