一、Linux释放内存的相关知识介绍:

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,例如当你在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。,此时就需要执行释放内存(清理缓存)的操作了。

Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉吗?所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改 /proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。要达到释放缓存的目的,我们首先需要了解下关键的配置文件 /proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。

一般复制了文件后,可用内存会变少,都被cached占用了,这是Linux为了提高文件读取效率的做法:为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"

释放内存前先使用sync命令做同步,以确保文件系统的完整性,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

Linux和Windows不一样,Linux的内存机制存在buffer和cache这两个功能:

cache(缓存):是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存当中读取,加速了数据的读取过程

buffer(缓冲):是指在写入数据时,先把分散的写入操作保存到内存当中,当达到一定程度再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程

这两个功能同样会占用内存空间,但是这个空间是可以随时调用的,下面我们就来说下,如何清空Linux缓冲与缓存。

buffer缓冲清空命令sync,这个命令会迅速将buffer中数据写入硬盘,然后清空buffer中数据。

需要注意的是,在生产环境中的服务器我们不要频繁的去释放内存,只在必要时候清理内存即可,更重要的是我们应该从应用程序层面去优化内存的利用和释放,经常清理内存可能只是暂时屏蔽的应用程序中的一些bug,所以更重要的是程序的调优,其他的交给操作系统来管理。

二、方法:

1、说明

切记缓存不要随意清空,清空cache命令最好在低负载时使用,不然可能会导致系统运行出问题!

Linux释放内存的命令:

释放内存的时候,首先执行命令sync将所有正在内存中的缓冲区写到磁盘中,其中包括已经修改的文件inode、已延迟的块I/O以及读写映射文件,从而确保文件系统的完整性;,

sync # sync命令可以多执行几遍;

echo 1 > /proc/sys/vm/drop_caches

drop_caches的值可以是0-3之间的数字,代表不同的含义:

0:不释放(系统默认值);默认情况下表示不释放内存,由操作系统自动管理;

1:释放页缓存;To free pagecache.

2:释放dentries和inodes;To free dentries and inodes.

3:释放所有缓存;To free pagecache, dentries and inodes.

其中cache缓存清空命令有三个:

释放完内存后改回去让系统重新自动分配内存。

echo 0 >/proc/sys/vm/drop_caches

注:在2.6.x系列的内核中可以设置为0,3系列的内核中设置为0就会报错,write error: Invalid argument。只能重启服务器恢复。

free -m #看内存是否已经释放掉了。

如果我们需要释放所有缓存,就输入下面的命令:

sync # sync命令可以多执行几遍;

echo 3 > /proc/sys/vm/drop_caches

2、释放缓存区内存的方法

(1)、清理pagecache(页面缓存)

sync # sync命令可以多执行几遍;

echo 1 > /proc/sys/vm/drop_caches 或者 sysctl -w vm.drop_caches=1

(2)、清理dentries(目录缓存)和inodes

sync # sync命令可以多执行几遍;

echo 2 > /proc/sys/vm/drop_caches 或者 sysctl -w vm.drop_caches=2

(3)、清理pagecache、dentries和inodes

sync # sync命令可以多执行几遍;

echo 3 > /proc/sys/vm/drop_caches 或者 sysctl -w vm.drop_caches=3

(4)、上面三种方式都是临时释放缓存的方法,要想永久释放缓存,需要在/etc/sysctl.conf文件中配置:vm.drop_caches=1/2/3,然后sysctl -p生效即可!

(5)、另外,可以使用sync命令来清理文件系统缓存,还会清理僵尸(zombie)对象和它们占用的内存

sync

三、free命令介绍

1、free命令介绍

[root@node1 ~]# free -g

total used free shared buffers cached

Mem: 15 6 8 0 0 1

-/+ buffers/cache: 5 10

Swap: 31 0 31

[root@node1 ~]#

第一行用全局角度描述系统使用的内存状况:

total 内存总数

used 已经使用的内存数,一般情况这个值会比较大,因为这个值包括了cache 应用程序使用的内存

free 空闲的内存数

shared 多个进程共享的内存总额

buffers 缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)

cached 缓存,用于已打开的文件

第二行描述应用程序的内存使用:

-buffers/cache 的内存数:used - buffers - cached

buffers/cache 的内存数:free buffers cached

前个值表示-buffers/cache 应用程序使用的内存大小,used减去缓存值

后个值表示 buffers/cache 所有可供应用程序使用的内存大小,free加上缓存值

可用内存=free memory + buffers + cached。

空闲内存=free(6)+buffers(0)+cached(1)

已用内存=total(15)-空闲内存

第三行表示swap的使用:

used 已使用

free 未使用

Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。

swap清理:

swapoff -a && swapon -a

注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大

2、free实际可用内存

为什么free这么小,是否关闭应用后内存没有释放?

但实际上,我们都知道这是因为Linux对内存的管理与Windows不同,free小并不是说内存不够用了,应该看的是free的第二行最后一个值:-/ buffers/cache: 3948 4031 ,这才是系统可用的内存大小。

实际项目中的经验告诉我们,如果因为是应用有像内存泄露、溢出的问题,从swap的使用情况是可以比较快速可以判断的,但free上面反而比较难查看。我觉得既然核心是可以快速清空buffer或cache,但核心并没有这样做(默认值是0),我们不应该随便去改变它。

一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的,虽然看上去可能比较小。当发生内存不足、应用获取不到可用内存、OOM错误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则,清空buffer,强制腾出free的大小,可能只是把问题给暂时屏蔽了,所以说一般情况下Linux都不用经常手动释放内存。

linux 释放 文件缓存,Linux中手动释放缓存的方法相关推荐

  1. Linux ls文件夹颜色(蓝色)的改变方法

    Linux ls文件夹颜色(蓝色)的改变方法 2011-11-02 09:37:48|  分类: Linux|字号 订阅 改成别的颜色的方法: 首先 # vi /etc/DIR_COLORS 内的设定 ...

  2. php单词出现频率,PHP编程计算文件或数组中单词出现频率的方法

    本文实例讲述了PHP编程计算文件或数组中单词出现频率的方法.分享给大家供大家参考,具体如下: 如果是小文件,可以一次性读入到数组中,使用方便的数组计数函数进行词频统计(假设文件中内容都是空格隔开的单词 ...

  3. Windows XP中手动安装驱动程序的方法

    Windows XP中手动安装驱动程序的方法 参考网址:https://jingyan.baidu.com/article/cdddd41c44cb1b53ca00e15f.html 今天小编教大家如 ...

  4. linux查看文件创建人,Linux中如何查看文件的创建时间详解

    一.简介 Linux的文件能否找到文件的创建时间取决于文件系统类型,在ext4之前的早期文件系统中(ext.ext2.ext3),文件的元数据不会记录文件的创建时间,它只会记录访问时间.修改时间.更改 ...

  5. linux去掉文件空行,linux下删除文件中空行的多种方法 互联网技术圈 互联网技术圈...

    源文件: $ cat a.txt baiked.com is a best Linux blog to learn Linux. It's FIVE years old blog. This webs ...

  6. 为什么linux虚拟机文件78g,linux 磁盘空间被占满但找不到目标文件的问题处理 lsof命令...

    lsof简介 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能. 直接输入lsof部分输出为: 每行 ...

  7. linux history文件路径,Linux、Unix常用命令(文件和目录相关)

    mkdir dirname 建立子目录. 注意:用户不能在一个不存在的目录中建立子目录. mkdir data 在当前目录下建立子目录 data mkdir /usr/data 在/usr/目录下建立 ...

  8. linux 查找文件 locate,linux文件查找(find,locate)

    文件查找: locate: 非实时,模糊匹配,查找是根据全系统文件数据库进行的: # updatedb, 手动生成文件数据库 速度快 find: 实时 精确 支持众多查找标准 遍历指定目录中的所有文件 ...

  9. Linux 执行文件 path,linux可执行文件添加到PATH环境变量的方法

    linux命令行下面执行某个命令的时候,首先保证该命令是否存在,若存在,但输入命令的时候若仍提示:command not found 这个时候就的查看PATH环境变量的设置了,当前命令是否存在于PAT ...

  10. linux 音频文件长度,Linux下压缩音频文件

    安装工具 sudo apt-get install lame 具体用法可以查看帮助  lame --help 通过更改音频文件的帧数 可以让文件变小  但是音质也会随之下降 现在比较多的mp3文件是1 ...

最新文章

  1. python函数def_python def 函数
  2. android UI进阶之实现listview中checkbox的多选与记录
  3. php 文件上传系统,php需登录文件上传管理系统
  4. 代码也浪漫:用Python放一场烟花秀!
  5. sql语句练习(二):Demand
  6. Angular6_服务端渲染SSR
  7. Undertow技术:为什么很多Spring Boot开发者放弃了Tomcat
  8. Integer 与 int 的区别
  9. 纯java程序意味着什么_Java到底是不是一种纯面向对象语言?
  10. Maven自定义配置生成包名
  11. 上周四更新决战俄罗斯小游戏的发包问题
  12. 光伏补贴新政出台 投资机会解析
  13. zoj 1100 - Mondriaan#39;s Dream
  14. webApp PHP项目打包供手机下载,免越狱免签名的苹果ios webAPP打包生成的网站教程(附iphone配置实用工具)...
  15. 希腊字母在数学或物理中代表的意思各是什么
  16. matlab时频工具箱简介,matlab时频工具箱
  17. C/C++:long int与long long的区别
  18. jQuery自定义插件
  19. Python3字符串前缀u、b、r
  20. 2020年中国储能材料产业链上中下游及未来发展趋势分析,电化学储能高速发展,储氢瓶、加氢站建设拉动需求「图」

热门文章

  1. 1g内存编译android,如何让Android手机1G内存就“够用”?
  2. 大聪明教你学Java | 没有绝对安全的系统
  3. svg模糊_SVG的运动模糊效果
  4. 一道被称为“神题”的试题之求熊是什么颜色的
  5. 租房高峰期,房产中介机构如何快速锁定客户?
  6. amoeba mysql mmm_MMM+Amoeba搭建MySQL高可用负载均衡群集
  7. iOS系统架构和常用框架
  8. zoj3551 Bloodsucker//概率dp
  9. rabbitmq的web管理界面无法使用guest用户登录
  10. 【ELMAN回归预测】基于matlab天牛须算法优化ELMAN回归预测【含Matlab源码 1375期】