Linux下清理内存和Cache方法

Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches


yuanwei@ubuntu:/proc/sys/vm$ ls
admin_reserve_kbytes        legacy_va_layout           oom_dump_tasks
block_dump                  lowmem_reserve_ratio       oom_kill_allocating_task
compact_memory              max_map_count              overcommit_memory
dirty_background_bytes      memory_failure_early_kill  overcommit_ratio
dirty_background_ratio      memory_failure_recovery    page-cluster
dirty_bytes                 min_free_kbytes            panic_on_oom
dirty_expire_centisecs      min_slab_ratio             percpu_pagelist_fraction
dirty_ratio                 min_unmapped_ratio         scan_unevictable_pages
dirty_writeback_centisecs   mmap_min_addr              stat_interval
drop_caches                 nr_hugepages               swappiness
extfrag_threshold           nr_hugepages_mempolicy     user_reserve_kbytes
hugepages_treat_as_movable  nr_overcommit_hugepages    vfs_cache_pressure
hugetlb_shm_group           nr_pdflush_threads         zone_reclaim_mode
laptop_mode                 numa_zonelist_order

没有清理cache 之前, cache 占用了307M内存. 

root@ubuntu:/home/yuanwei# free -m
             total       used       free     shared    buffers     cached
Mem:          5225       1074       4151          6        114        307
-/+ buffers/cache:        651       4574
Swap:         4701          0       4701


频繁的文件访问会导致系统的Cache使用量大增

$ free -m
total used free shared buffers cached
Mem: 3955 3926 28 0 55 3459
-/+ buffers/cache: 411 3544
Swap: 5726 0 5726

free内存减少到几十兆,系统运行缓慢

运行sync将dirty的内容写回硬盘
$sync

通过修改proc系统的drop_caches清理free的cache
$echo 3 > /proc/sys/vm/drop_caches

drop_caches的详细文档如下:
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:
* 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
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.

清理之后看.  运行 sync .   cache只用了149M内存. 

root@ubuntu:/home/yuanwei# free -m
             total       used       free     shared      buffers          cached
Mem:          5225       1010       4215          7          2      
 149
-/+ buffers/cache:        858       4367
Swap:         4701          0       4701


修改/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的作用基本无法发挥。 

你可能感兴趣的:(Linux下清理内存和Cache方法)