手动清理
Writing to this will cause the kernel to drop clean caches,dentries and inodes from memory,causing that memory to become free.
To free pagecache:1
echo 1 > /proc/sys/vm/drop_caches
To free dentries
and inodes:1
echo 2 > /proc/sys/vm/drop_caches
To free pagecache,
dentries and inodes:1
echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation,and dirty objects are notfreeable,the user should run “sync” first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.
这里有三个级别可以使用:
- 使用1时只清理pagecahe
- 使用2清理dentries和inodes(也就是slab缓存,查看方式为:cat/proc/meminfo,SReclaimable表示可回收的内存)
- 使用3时三者都清理。由于这是一个非破坏性操作而且脏对象不会被释放,因此应当先执行”sync“后再设置这个参数。
自动清理
/proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。当可用内存低于这个参数时,系统开始回收cache内存,以释放内存,直到可用内存大于这个值。1
2
3vm.min_free_kbytes=4096000 //单位 kb
vm.swappiness=40
vm.vfs_cache_pressure=200
说明:
- 调整min_free_kbytes的目的是保持物理内存有足够的空闲空间,防止突发性的换页。
- swapiness缺省为60,减少swapiness会使系统尽快通过swapout不使用的进程资源来释放更多的物理内存。
- vfs_cache_pressure的缺省值是100,加大这个参数设置了虚拟内存回收directory和i-node缓冲的倾向,这个值越大,回收的倾向越严重。调整这3个参数的目的就是让操作系统在平时就尽快回收缓冲,释放物理内存,这样就可以避免突发性的大规模换页。
减少vfs_cache_pressure的值,会导致内核倾向于保留dentry和inode缓存。
增加vfs_cache_pressure的值,(即超过100时),则会导致内核倾向于重新声明dentries和inodes
总之,vfs_cache_pressure的值:
小于100的值不会导致缓存的大量减少
超过100的值则会告诉内核你希望以高优先级来清理缓存。
其实无论vfs_cache_pressure的值采用什么值,内核清理缓存的速度都是比较低的。
如果将此值设置为10000,系统将会将缓存减少到一个合理的水平。
查看空闲内存阈值:
1 | sysctl -a | grep min_free_kbytes |
具体设置【重启失效】:1
2
3echo 1024000 > /proc/sys/vm/min_free_kbytes //设置1G的阈值
echo 200 > /proc/sys/vm/vfs_cache_pressure
echo 40 > /proc/sys/vm/swappiness
或1
2
3sysctl -w vm.min_free_kbytes=1024000
sysctl -w vm.vfs_cache_pressure=200
sysctl -w vm.swappiness=40
那么Linux空闲内存=102400kb+原始预留空闲内存(如我的是700M左右)。
更多文章,请关注:开猿笔记