`

在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 下 buffcache 占用过高的问题.docx

    解决 linux下 buff/cache 占用过高的问题解决 linux下 buff/cache 占用过高的问题

    Linux内核内存Cache机制原理

    Linux内核内存Cache机制原理从源码的角度来分析流程,可以帮助Linux内核学习者了结Cache的内存机制!

    Linux内存buffer和cache的区别

    在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得...

    linux内存中buffer与cache的区别

    我们通过free命令查看机器空闲内存时,会发现free的值很...这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。

    linux下释放cache内存

    当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题

    linux 查看 cache 中文件

    安装此工具后,可以查看系统内存中 cache 包含的文件。 在编译安装此工具之前需要安装GCC包

    Linux pagecache与内存占用

    实验环境 CentOS Linux release 7.3.1611 (Core) 3.10.0-514.6.1.el7.x86_64  一、概念介绍 ...  used:已使用的内存(total – free – buffers – cache)  free:未使用的内存  shared:通常情况下是t

    Cache Server V1.2.0 嵌入式(实时)内存数据库(linux 32)

    接访问数据,从而获得极高的存取速度和极强的并发访问能力的数据库管理系统,在设计风格上兼容主流数据库(MS SQL SERVER、SYBASE)的特点,宿主进程通过在本进程内加载Cache Server直接访问内存数据库。 Cache ...

    linux内存中cache分析

    去掉^M的版本 博文链接:https://phl.iteye.com/blog/2242033

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

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

    Linux系统内核文件Cache管理机制

    特别是在高性能计算领域,Linux 已经成为一个占主导地位的操作系统,在2005年6月全球TOP500 计算机中,有 301 台部署的是 Linux 操作系统。因此,研究和使用 Linux 已经成为开发者的不可回避的问题了。本文介绍一下 ...

    Linux内存中Swap和Buffer Cache机制

    Linux的产生与发展,更多的应用与服务器,那么对于Linux的各个管理机制要非常清 楚,一个完整的Linux系统主要有存储管理,内存管理,文件系统和进程管理等几...本文将为大家介绍Linux内存中Swap和Buffer Cache机制。

    linux 内核 cache 管理介绍

    关于linux的cache管理的介绍

    linux内存分配与回收及swap使用观察

    这会因为系统为了加速文件读写速度,减少磁盘使用次数尽量多的使用内存cache硬盘上的数据。虽然free比较少了,但是有新的内存请求的时候可以立即从cache里面回收物理内存,所以系统显示的可用内存变化不大(461M-465...

    介绍linux cache机制

    介绍linux的cache机制,包含一些代码,需要了解的,自取

    Linux操作系统的内存使用机制研究

    Linux支持虚拟内存(Virtual Mmemory),虚拟内存是指使用磁盘当作RAM的扩展,这样可用的内存的大小就相应地增大了。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),所以程序就不会象一直在内存中运 行的那样...

    PrimoCache Server2.2.0服务器版.exe

    此外,PrimoCache 支持使用系统未识别内存作为缓存设备,从而克服部分 Windows 操作系统对内存总量的限制(例如 32 位桌面 Windows 系统最大仅支持 4GB 内存),充分利用全部物理内存。 PrimoCache 实现了多种缓存...

    linux内核2.6cache源代码

    linux内核2.6cache源代码,很详细的源代码,给linux学习带来狠多参考

    Linux Kernel Cache.doc

    Linux Kernel Cache.doc 介绍

    linux内存管理-FAQs.pdf

    与内存管理系统相关的各种flags汇总如下... 在申请内存时, 需要使用gfp flags, 详情见2.4.5节的《分配掩码GFP_XXX》  kmem_cache_create函数需要用到SLAB flags, 详见2.5.3节《APIs》中关于kmem_cache_create的介绍

Global site tag (gtag.js) - Google Analytics