Linux下释放被cache占用的物理内存
当你在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.
先来说说free命令
[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
Swap: 511 0 511
其中:
total 内存总数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总额
buffers Buffer Cache和cached Page Cache 磁盘缓存的大小
-buffers/cache 的内存数:used - buffers - cached
+buffers/cache 的内存数:free + buffers + cached
可用的memory=free memory+buffers+cached
有了这个基础后,可以得知,我现在used为163MB,free为86,buffer和cached分别为10,94
那么我们来看看,如果我执行复制文件,内存会发生什么变化.
[root@server ~]# cp -r /etc ~/test/
[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
Swap: 511 0 511
在命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐都被cached吃掉了.别紧张,这是为了提高文件读取效率的做法.
为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"
那么有人说过段时间,linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放>?
[root@server test]# free -m
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511
MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的!
/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:
[root@server test]# cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默认为0
[root@server test]# sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3
将/proc/sys/vm/drop_caches值设为3
[root@server test]# free -m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511
再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.
有关/proc/sys/vm/drop_caches的用法在下面进行了说明
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become
free.
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(8) first.
分享到:
相关推荐
- 只有当buffers和cache都用尽且物理内存也被完全占用时,系统才会开始使用swap空间,即硬盘上的虚拟内存。 #### 五、Buffer与Cache的具体区别 1. **用途不同**: - Buffer:主要用于I/O写操作,例如将数据写入...
在Linux内核中,内存的使用效率通过缓存(Cache)机制得到了显著提升。本篇文章将深入探讨Linux内存中的缓存分析,以及如何利用工具进行理解和管理。 首先,我们来了解Linux内存的基本结构。Linux内存分为物理内存...
在实际应用中,了解缓存中的文件对于系统管理员来说非常有用,例如,可以帮助他们监控系统的资源使用情况,找出占用大量内存的文件,或者在性能调优时,确定是否需要清除某些缓存以释放内存资源。此外,对于开发者而...
Linux系统将缓冲区和缓存视为可快速回收的资源,因为它们可以被迅速释放以供其他进程使用。因此,从应用程序的角度来看,`-buffers/cache`的`used`和`+buffers/cache`的`free`更能反映内存的实际使用状态。 Linux还...
本文将深入探讨Linux内核的缓存机制、内存使用情况的查看方法以及如何有效地释放因文件操作而占用的缓存。 首先,我们需要了解Linux系统中内存状态的几个关键概念。通过运行`free`命令,我们可以得到如下的信息: ...
### 如何查看 Linux 下内存占用率 #### 方法-1:使用 `free` 和 `awk` 为了查看Linux系统中的内存占用情况,一种常用的方法是结合使用`free`和`awk`这两个强大的命令。具体步骤如下: 1. **运行 `free -t` 命令**...
实验环境 CentOS Linux release 7.3.1611 ... total:系统总内存大小(分物理内存mem、交换分区swap) used:已使用的内存(total – free – buffers – cache) free:未使用的内存 shared:通常情况下是t
这些缓存策略大大减少了文件系统调用(比如read、write、getdents)的时间,但同时也导致了物理内存被大量占用,尤其是当缓存了大量未使用的数据时。这种行为是Linux设计的一部分,用以提高系统整体性能,但有时也会...
通过 free 命令,我们可以看到系统的总物理内存、已分配的内存、未被分配的内存、缓存的数量等信息。 Buffer 和 Cache 在系统中的作用 Buffer 和 Cache 都占用内存,但是它们的作用不同。Buffer 作为块设备的读写...
对于特定类型的内存,如kmem_cache,内核实现了自动垃圾回收机制,当对象不再使用时,可以自动释放其占用的内存,避免内存泄漏。 以上内容仅是Linux内核内存管理机制的一部分,实际的内存管理涉及到许多更复杂的...
这些内存区域通常与特定进程的地址空间相关联,因此在进程结束时会被释放。 理解这些基本概念对于Linux技术支持人员来说非常重要,因为他们需要向用户解释系统性能和资源使用情况。通过合理地利用和计算内存,Linux...
9. 内存管理工具:`free`命令显示当前系统的内存使用情况,`top`和`htop`可以实时监控进程内存占用,`smem`报告详细的内存使用报告,包括物理和交换内存。 10. 调优策略:Linux内存管理可以通过调整内核参数来优化...
缓存管理需要平衡缓存命中率和内存占用,避免过多的内存被无效的缓存占据。 此外,Linux还提供了内存控制组(cgroups)来限制和隔离不同进程的内存使用,防止某个进程消耗过多内存导致系统不稳定。同时,OOM(Out ...
此时,部分不常用的内存会被临时移动到交换分区,以释放更多的物理内存供其他进程使用。 **检查交换阈值方法**: - 使用 `free -m` 命令查看交换分区的状态。 - 查看 `/proc/kcore` 文件的大小,以了解内存镜像的...
当buff/cache过高时,可能会占用过多的物理内存,导致其他进程可用内存减少,从而影响系统运行效率。`hcache`是一个与这个问题相关的工具,可能是用于管理和优化这种状况的程序。 `chmod 755 hcache` 是一个Linux...
首先,Linux内存管理模型将物理内存划分为不同的区域(ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM),每个区域都有一个伙伴系统。伙伴系统是一种内存分配算法,它以2的幂次方大小分配和合并内存块,确保快速分配和回收。...
本文将详细介绍如何在Linux环境下使用`top`命令查看CPU使用率,以及如何利用`free`命令监控内存状态。 #### 使用`top`命令查看CPU使用情况 `top`命令是一个实时的系统监视工具,它能够提供关于系统任务执行情况的...
例如,`vmstat`的输出中,`swpd`列显示已使用的交换空间,`free`列表示未使用的物理内存,`buff`和`cache`列分别显示缓冲区和缓存占用的内存。 了解这些内存管理概念和监控方法,可以帮助Linux系统管理员有效地分析...
Linux虚拟内存管理是操作系统核心的重要组成部分,它负责管理和优化系统中的内存资源,使得应用程序能够高效地使用物理内存和硬盘上的交换空间。在Linux系统中,虚拟内存并不是一个实际的硬件特性,而是一种软件策略...