码迷,mamicode.com
首页 > 系统相关 > 详细

linux pagecache与内存占用

时间:2017-05-12 13:40:00      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:linux   缓冲区   shared   回收   

一、概念介绍

     linux系统中通常使用free命令来查看内存使用情况,free命令主要是从/proc/meminfo文件中读取的内存数据然后进行简单处理进行展示,根据查看free命令的手册了解到各个字段的含义。

技术分享

total:系统总内存大小(分物理内存mem、交换分区swap)

used:已使用的内存(total - free - buffers - cache)

free:未使用的内存

shared:通常情况下是tmpfs(内存文件系统)使用的内存

buffers:内核缓冲区使用的内存

cache:page cache和slab所占用的内存之和

buff/cache:buffers + cache

available:在不进行swap的前提下还有多少内存可用于创建新的进程。这个跟free、buff/cache字段中的数字有所不同,这里的剩余内存是free加上可以被回收(有些slab、cache正在使用,不能回收)的page cache、mem slab的值的总和。

     上述的page cache是系统读写磁盘文件时为了提高性能而将一部分文件缓存到内存中。这种做法虽然提高了磁盘I/O性能,但是也极大的占用了物理内存,特别当系统内存紧张时更容易出现问题。

 

二、实际用途

     linux系统会经常执行一些写日志、生成备份文件的工作,当这些文件比较大时相应的cache就会占用大量的系统内存,而且这些类型的cache并不会被经常访问,所以系统会定期将这些cache flush到磁盘中。但是如果系统未及时的将这些cache flush到磁盘中的话,就会占用大量的内存导致出现swap的情况,这样会很影响系统的整体性能。

     /proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。有一个内核配置接口 /proc/sys/vm/drop_caches 可以允许用户手动清理cache来达到释放内存的作用,这个文件有三个值:1、2、3。具体介绍如下

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.

- This tunable was added in 2.6.16.

根据上面介绍,在执行上述命令需要先执行sync命令将page cache刷新到磁盘中,然后在通过该drop_caches接口进行缓存清理。技术分享

     另外,在编写处理大文件的代码时,避免整个文件全部读取到内存中,这样会导致占用大量的内存,极端情况下会出现linux 系统的OOM导致的正常进程被终止。尽量将文件分割成小文件再进行处理,文件使用完毕后尽早close。


linux pagecache与内存占用

标签:linux   缓冲区   shared   回收   

原文地址:http://33997k7k.blog.51cto.com/12877992/1924875

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!