`

Linux下释放被cache占用的物理内存

阅读更多
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.
分享到:
评论

相关推荐

    Linux内存buffer和cache的区别

    - 只有当buffers和cache都用尽且物理内存也被完全占用时,系统才会开始使用swap空间,即硬盘上的虚拟内存。 #### 五、Buffer与Cache的具体区别 1. **用途不同**: - Buffer:主要用于I/O写操作,例如将数据写入...

    linux内存中cache分析

    在Linux内核中,内存的使用效率通过缓存(Cache)机制得到了显著提升。本篇文章将深入探讨Linux内存中的缓存分析,以及如何利用工具进行理解和管理。 首先,我们来了解Linux内存的基本结构。Linux内存分为物理内存...

    linux 查看 cache 中文件

    在实际应用中,了解缓存中的文件对于系统管理员来说非常有用,例如,可以帮助他们监控系统的资源使用情况,找出占用大量内存的文件,或者在性能调优时,确定是否需要清除某些缓存以释放内存资源。此外,对于开发者而...

    Linux下应用程序到底使用了多少内存

    Linux系统将缓冲区和缓存视为可快速回收的资源,因为它们可以被迅速释放以供其他进程使用。因此,从应用程序的角度来看,`-buffers/cache`的`used`和`+buffers/cache`的`free`更能反映内存的实际使用状态。 Linux还...

    linux下释放经常拷贝文件导致的缓存占用.pdf

    本文将深入探讨Linux内核的缓存机制、内存使用情况的查看方法以及如何有效地释放因文件操作而占用的缓存。 首先,我们需要了解Linux系统中内存状态的几个关键概念。通过运行`free`命令,我们可以得到如下的信息: ...

    如何查看 Linux 下内存占用率、 CPU 的占用率.docx

    ### 如何查看 Linux 下内存占用率 #### 方法-1:使用 `free` 和 `awk` 为了查看Linux系统中的内存占用情况,一种常用的方法是结合使用`free`和`awk`这两个强大的命令。具体步骤如下: 1. **运行 `free -t` 命令**...

    Linux pagecache与内存占用

    实验环境 CentOS Linux release 7.3.1611 ...  total:系统总内存大小(分物理内存mem、交换分区swap)  used:已使用的内存(total – free – buffers – cache)  free:未使用的内存  shared:通常情况下是t

    手工释放linux内存_proc sys vm drop_caches

    这些缓存策略大大减少了文件系统调用(比如read、write、getdents)的时间,但同时也导致了物理内存被大量占用,尤其是当缓存了大量未使用的数据时。这种行为是Linux设计的一部分,用以提高系统整体性能,但有时也会...

    Linux操作系统中内存buffer和cache的区别.docx

    通过 free 命令,我们可以看到系统的总物理内存、已分配的内存、未被分配的内存、缓存的数量等信息。 Buffer 和 Cache 在系统中的作用 Buffer 和 Cache 都占用内存,但是它们的作用不同。Buffer 作为块设备的读写...

    Linux_mem.rar_Linux内核源代码解读--内存管理

    对于特定类型的内存,如kmem_cache,内核实现了自动垃圾回收机制,当对象不再使用时,可以自动释放其占用的内存,避免内存泄漏。 以上内容仅是Linux内核内存管理机制的一部分,实际的内存管理涉及到许多更复杂的...

    Linux操作系统中的内存简单计算方式介绍

    这些内存区域通常与特定进程的地址空间相关联,因此在进程结束时会被释放。 理解这些基本概念对于Linux技术支持人员来说非常重要,因为他们需要向用户解释系统性能和资源使用情况。通过合理地利用和计算内存,Linux...

    linux-memory-manage.rar_Linux 内存管理_linux_memory_内存管理 linux_内存管理

    9. 内存管理工具:`free`命令显示当前系统的内存使用情况,`top`和`htop`可以实时监控进程内存占用,`smem`报告详细的内存使用报告,包括物理和交换内存。 10. 调优策略:Linux内存管理可以通过调整内核参数来优化...

    深入理解Linux虚拟内存管理.rar

    缓存管理需要平衡缓存命中率和内存占用,避免过多的内存被无效的缓存占据。 此外,Linux还提供了内存控制组(cgroups)来限制和隔离不同进程的内存使用,防止某个进程消耗过多内存导致系统不稳定。同时,OOM(Out ...

    查看linux系统内存使用情况.pdf

    此时,部分不常用的内存会被临时移动到交换分区,以释放更多的物理内存供其他进程使用。 **检查交换阈值方法**: - 使用 `free -m` 命令查看交换分区的状态。 - 查看 `/proc/kcore` 文件的大小,以了解内存镜像的...

    hcache Linux系统buff/cache过高问题处理

    当buff/cache过高时,可能会占用过多的物理内存,导致其他进程可用内存减少,从而影响系统运行效率。`hcache`是一个与这个问题相关的工具,可能是用于管理和优化这种状况的程序。 `chmod 755 hcache` 是一个Linux...

    一种Linux内存管理机制.pdf

    首先,Linux内存管理模型将物理内存划分为不同的区域(ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM),每个区域都有一个伙伴系统。伙伴系统是一种内存分配算法,它以2的幂次方大小分配和合并内存块,确保快速分配和回收。...

    Linux查看CPU和内存使用情况

    本文将详细介绍如何在Linux环境下使用`top`命令查看CPU使用率,以及如何利用`free`命令监控内存状态。 #### 使用`top`命令查看CPU使用情况 `top`命令是一个实时的系统监视工具,它能够提供关于系统任务执行情况的...

    linux可用内存足够为什么还用swap.docx

    从上述数据可以看出,尽管buffer/cache占用了大量的内存空间(21595MB),但是系统依然认为有11838MB的内存可供使用。 #### buffer/cache的用途与管理 - **Buffer/Cache**:这部分内存主要用于存储临时文件或缓存...

    linux系统基本的内存知识讲解.docx

    例如,`vmstat`的输出中,`swpd`列显示已使用的交换空间,`free`列表示未使用的物理内存,`buff`和`cache`列分别显示缓冲区和缓存占用的内存。 了解这些内存管理概念和监控方法,可以帮助Linux系统管理员有效地分析...

Global site tag (gtag.js) - Google Analytics