`

在linux下回收cache所使用的物理内存

 
阅读更多

由于LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度。但在有些时候,如果物理内存全被使用了,有突发性物理内存消耗时就会有性能问题,如mysql数据库服务器。

 

先说下free命令怎么看内存

[root@tangj proc]# free
total used free shared buffers cached
Mem: 515588 295452 220136 0 2060 64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608

其中第一行用全局角度描述系统使用的内存状况:

total——总物理内存

used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存

free——完全未被使用的内存

shared——应用程序共享内存

buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)

cached——缓存,用于已打开的文件

 

note:

total=used+free

used=buffers+cached (maybe add shared also)

 

第二行描述应用程序的内存使用:

前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值

后个值表示+buffers/cache——所有可供应用程序使用的内存大小,free加上缓存值

note:

-buffers/cache=used-buffers-cached

+buffers/cache=free+buffers+cached

 

第三行表示swap的使用:

used——已使用

free——未使用

说明,释放前最好sync一下,防止丢数据。

 

cache内存释放(运行一次只是暂时回收,可以用crontal来定期执行 sync 和 相应的清理语句自动清理,以下操作在kernel 2.6.16以上的内核有效):

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一下,防止丢数据。

 

修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加

vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3

上面的设置比较粗暴,使cache的作用基本无法发挥。需要根据机器的状况进行适当的调节寻找最佳的折衷。

 

/proc/sys/vm/dirty_ratio

这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数 据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 10。设1加速程序速度

 

/proc/sys/vm/dirty_background_ratio

这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时 候,pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时, 应该降低其数值,一般启动上缺省是 5

 

/proc/sys/vm/dirty_writeback_centisecs

这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操

 

/proc/sys/vm/dirty_expire_centisecs

这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。建议设置为 1500,也就是15秒算旧。 

/proc/sys/vm/drop_caches

释放已经使用的cache

/proc/sys/vm/page-cluster

该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。

/proc/sys/vm/swapiness

该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。

/proc/sys/vm/vfs_cache_pressure

该文件表示内核回收用于directory和inode cache内存的倾向

 

/etc/sysctl.conf
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=1
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swapiness=100
vm.vfs_cache_pressure=133

vm.dirty_ratio = 5    #dft 20  %
vm.dirty_background_ratio =5 #dft 10 %
vm.dirty_writeback_centisecs=100 #dft 500 is 5s
vm.dirty_expire_centisecs=300    #dft 30000 is 30s
vm.drop_caches=3  #dft  0
vm.swappiness=100  #dft 60
vm.vfs_cache_pressure=133  #dft 100

vm.min_free_kbytes=204800

#200M mem

save simple sysctl -w net.ipv4.route.flush=1

 

 

分享到:
评论

相关推荐

    linux内存中cache分析

    在Linux系统中,内存管理是操作系统的核心组成部分,它负责为各种进程分配和回收内存资源。在Linux内核中,内存的使用效率通过缓存(Cache)机制得到了显著提升。本篇文章将深入探讨Linux内存中的缓存分析,以及如何...

    Linux内核内存Cache机制原理

    3. **VFS(Virtual File System)**:在Linux内核中,VFS是提供统一文件系统接口的层,它使得各种不同类型的文件系统可以共存,并且能透明地使用内存Cache。VFS抽象出了一套通用的操作,如打开、关闭、读取和写入...

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

    在Linux操作系统中,理解应用程序如何使用内存是非常关键的,特别是对于系统管理员和开发者来说。本文将深入探讨Linux下应用程序的内存使用情况,并解析`top`命令和`free`命令提供的内存信息。 首先,当我们通过`...

    Linux查看CPU和内存使用情况

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

    内存管理方面x86,LINUX下的内存管理方式

    在IT领域,内存管理是操作系统的核心组成部分,尤其是在x86架构下的Linux系统中。内存管理不仅关乎系统的性能,还直接影响到程序的运行效率和稳定性。本文将深入探讨x86架构下Linux系统的内存管理机制。 首先,x86...

    01-Linux内存管理之二:在X86上的虚拟内存管理.rar

    本文将深入探讨Linux在X86平台上如何实现虚拟内存管理,包括虚拟地址空间的划分、页表机制、内存分配与回收、交换机制以及缓存管理。 1. 虚拟地址空间: 在X86架构下,Linux为每个进程分配了一个独立的4GB虚拟地址...

    Linux内核的内存管理探秘之二 物理内存的管理(一)分配与回收.pdf

    在深入探讨Linux内核的内存管理时,物理内存的分配与回收是至关重要的环节。Linux内核采用了一种高效的分配算法——伙伴系统(Buddy System),其核心在于将内存以4KB的页面为单位进行管理,并利用位图和链表来跟踪...

    linux核心中的内存管理和缓冲机制

    3. 内存回收:为防止内存泄漏,Linux使用了引用计数、垃圾回收策略以及 slab 分配器。slab 分配器预先分配一部分内存,用于快速分配和释放小对象,提高效率。 4. 交换与交换空间:当物理内存不足时,Linux会将不...

    linux源代码分析之内存管理

    Linux操作系统采用了虚拟内存的概念,这使得应用程序无需关心物理内存的具体位置,而是通过虚拟地址空间来访问内存。虚拟内存的实现依赖于一系列复杂的数据结构和算法,以下是一些关键的数据结构: ##### 2.1 Page ...

    linux内核2.6cache源代码

    当物理内存不足时,LRU会根据最近最少使用的页面进行淘汰,确保活跃度高的数据留在缓存中。 4. **VFS(Virtual File System)**:虚拟文件系统层支持多种文件系统,它抽象了各种文件系统的差异,提供了统一的接口。...

    [linux怎么看内存使用率]linux查看内存使用率.docx

    在 Linux 系统中,查看内存使用率是非常重要的,了解系统中的内存使用情况可以帮助我们更好地对系统进行优化和配置。下面我们将详细介绍如何使用 top 和 free 命令来查看系统中的内存使用情况。 1. 使用 top 命令...

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

    1. 物理内存:在Linux中,物理内存是指计算机硬件中的RAM,分为用户空间和内核空间。用户空间供应用程序使用,内核空间由操作系统管理,执行内核功能。 2. 虚拟内存:Linux使用虚拟内存系统,使得每个进程都有自己...

    一种Linux内存管理机制.pdf

    当内存不足时,Linux会尝试回收不再使用的内存。这可能包括释放slab中的对象,或者在必要时触发OOM(Out of Memory)杀手,杀死占用内存最多的进程以释放资源。 为了避免OOM事件的发生,可以通过调整Linux的内存...

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

    此外,内核还可以使用内存屏障(Memory Barrier)来确保缓存一致性,保证多处理器系统中的正确同步。 8. 垃圾回收: 对于特定类型的内存,如kmem_cache,内核实现了自动垃圾回收机制,当对象不再使用时,可以自动...

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

    在Linux中,内存使用情况可以通过`free`命令查看。例如,输出显示了总内存(total)、已用内存(used)、空闲内存(free)、共享内存(shared)以及缓冲和缓存的大小。其中,“-/+ buffers/cache”行表示扣除缓冲和...

    linux环境下的内存管理

    Linux内核负责物理内存的全局管理,包括伙伴系统(buddy allocator)用于分配和回收大块内存,slab 分配器用于缓存小对象,以及页缓存(page cache)来加速文件系统操作。 ### 内存管理实例 在实践中,了解内存...

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

    2. 优化:避免不必要的全局变量,合理使用内存分配和释放,减少内存碎片。 总结,Linux虚拟内存管理是系统高效运行的关键,涉及地址映射、页面置换、内存分配等多个方面。理解和掌握这些知识点对于Linux系统管理员...

    深入理解Linux内存管理

    - **缓冲区**:在某些情况下,Linux会使用称为缓冲区(bounce buffers)的技术来处理高内存访问。 #### 十一、页帧回收 页帧回收部分探讨了Linux如何回收不再使用的页帧。 - **交换守护进程(kswapd)**:这是一个...

    Linux Kernel Cache.doc

    2. **伙伴系统 (Buddy System)**:这是一种高效的内存分配机制,主要用于分配和回收物理内存。 3. **基数树 (Radix Tree)**:基数树是一种用于管理大量数据结构的有效方法,在 Linux 内核中用于高效管理页表等数据...

    Linux内存管理编程

    Linux内存管理编程是操作系统核心部分的关键技术之一,它涉及到如何高效地分配、使用和回收内存资源。本实验旨在帮助你深入理解Linux环境下的内存管理机制,主要包括内存映射(mapping)和解除映射(unmapping),...

Global site tag (gtag.js) - Google Analytics