linux pagecache与内存占用

实验环境 CentOS Linux release 7.3.1611 (Core)  3.10.0-514.6.1.el7.x86_64

一、概念介绍

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与内存占用相关推荐

  1. Linux中Cache内存占用过高解决办法

    在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: 这里的默认显示单位是kb,我的服务器是128G内存,所以数字显 ...

  2. 查看Linux磁盘及内存占用情况

    查看磁盘使用情况: df -k:以KB为单位显示磁盘使用量和占用率 df -m:以Mb为单位显示磁盘使用量和占用率 df –help:查看更多df命令及使用方法 查看内存占用情况: 1.top PID ...

  3. Linux buffer/cache 内存占用过高的原因以及解决办法

    表现现象 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个 CoreOS 的系统上,free命令的显示内容大概是这样一个状态: core@localhost ~ $ free ...

  4. linux缓冲区内容占用较多什么原因,Linux中Cache内存占用太高解决办法

    在Linux系统中,咱们常常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态:html 这里的默认显示单位是kb,个人服务器是128G内存,因 ...

  5. linux system查看内存占用,Linux查看系统内存占用

    1.查看内存情况 free -h 解释下基本概念 Mem 内存的使用信息 Swap 交换空间的使用信息 total 系统总的可用物理内存大小 used 已被使用的物理内存大小 free 还有多少物理内 ...

  6. 荣耀linux版开机内存占用高,win10开机内存占用50怎么办_win10一开机内存就占用过高的解决方法...

    win10开机内存占用50怎么办?相信很多用户都遇到过这种情况,但内存占用过高会导致我们使用电脑变得很不流畅,那要怎么解决这一问题呢?下面小编就以win10旗舰版为例,来为大家整理了win10一开机内 ...

  7. linux查看服务器内存占用情况

    查看某个进程的占用内存情况(以'device_maintenance'为例) 1.查找进程号 ps -ef | grep 'device_maintenance' 或 ps -aux | grep ' ...

  8. linux setroubleshootd进程 内存占用过大

    问题: 服务器发现问题:内存占满,甚至swap也完全占用. 解决: 系统8G内存,setroubleshootd进程占用4G,该进程是SElinux的守护进程,关闭SElinux即可. vi /etc ...

  9. linux怎么释放内存占用,如何将linux占用的空间释放

    释放过度占用的空间 12/31 2008  安装配置 | Oracle 1835 次查看 上一条:给数据库管理员设定访问限制 下一条:Oracle10gR2自动检查点调整的新特性 - 环境: OS:R ...

  10. linux 内存占用_分享Linux内存占用几个案例

    案例一 问题 最近一台 CentOS 服务器,发现内存无端损失了许多,free 和 ps 统计的结果相差十几个G,非常奇怪,后来Google了许久才搞明白. 分析 1.linux系统内存消耗主要有三个 ...

最新文章

  1. 我叫Java,2019年总结,大家请查收
  2. 10.8 ss:查看网络状态
  3. Kaggle API
  4. 加sql查询语句导出_搞不懂这些查询语句,SQL简单查询也无法从入门到熟练
  5. matlab 实验5,MATLAB实验5报告.doc
  6. Redis工作笔记-持久化
  7. Oracle的 MODEL 查询
  8. 京东商品价格查询易语言代码
  9. 富文本编辑器 可全屏可粘贴(只能单独粘贴图片或文字)
  10. UA MATH563 概率论的数学基础 鞅论初步3 条件期望的性质
  11. 华为智慧屏鸿蒙20,华为智慧屏SE系列首销 搭载鸿蒙分布式跨屏技术
  12. crt设置自动保存日志的方法
  13. 【Crow】一款开源C++Web框架的安装与构建
  14. 风暴——老奶雷加尔使用心得
  15. 传统文化也能这么有意思——全球第一家最有仙气、价值亿万的大数据库
  16. 使用python进行数据分析之电影评分
  17. 20-在线考试系统数据库-班级信息数据操作(一)
  18. ROS运行调用摄像头无法显示的解决办法
  19. 当你还在犹豫不决的时候,其他小伙伴已经捷足先登了!
  20. 《Unity 3.x游戏开发实例》——1.5节欢迎来到Unity 3D

热门文章

  1. Myeclipse8.5 最新注册码以使用方法(可以用到2015年!!!)
  2. [转载] 信息系统项目管理师教程——06 信息化基础知识
  3. 字符数字转换 atoi 与 strtol
  4. 蓝桥杯第五届JavaC组杨辉三角问题解决方法
  5. vue程序中组件间的传值方式
  6. 大数据挑战:敢不敢不要加入人的判断?
  7. 如何交叉编译 linux kernel 内核
  8. pandas 修改 DataFrame 列名 1
  9. PhantomJS其他语言调用
  10. MyBatis多参数传递之默认命名方式示例——MyBatis学习笔记之十二