释放内存


在Linux系统下,咱们通常不须要去释放内存,由于系统已经将内存管理的很好。可是凡事也有例外,有的时候内存会被缓存占用掉,致使系统使用SWAP空间影响性能,此时就须要执行释放内存(清理缓存)的操做了。node

Linux系统的缓存机制是至关先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操做。可是在进行了大量文件操做以后,缓存会把内存资源基本用光。但实际上咱们文件操做已经完成,这部分缓存已经用不到了。这个时候,咱们难道只能眼睁睁的看着缓存把内存空间占据掉么?缓存

因此,咱们仍是有必要来手动进行Linux下释放内存的操做,其实也就是释放缓存的操做了。yii

要达到释放缓存的目的,咱们首先须要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值能够为0~3之间的任意数字,表明着不一样的含义:ide

0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放全部缓存性能

知道了参数后,咱们就能够根据咱们的须要,使用下面的指令来进行操做。this

首先咱们须要使用sync指令,将全部未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。不然在释放缓存的过程当中,可能会丢失未保存的文件。code

#syncserver

接下来,咱们须要将须要的参数写进/proc/sys/vm/drop_caches文件中,好比咱们须要释放全部缓存,就输入下面的命令:内存

#echo 3 > /proc/sys/vm/drop_caches资源

此指令输入后会当即生效,能够查询如今的可用内存明显的变多了。

要查询当前缓存释放的参数,能够输入下面的指令:

#cat /proc/sys/vm/drop_caches


----------------------------------------------------------------

1.清理前内存使用状况
free -m

2.开始清理
echo 1 > /proc/sys/vm/drop_caches

3.清理后内存使用状况
free -m

4.完成!

查看内存条数命令:

dmidecode | grep -A16 "Memory Device$"


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

# sync
# echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

cache释放:
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

说明,释放前最好sync一下,防止丢数据。

由于LINUX的内核机制,通常状况下不须要特地去释放已经使用的cache。这些cache起来的内容能够增长文件以及的读写速度。

先说下free命令怎么看内存

[root@yuyii proc]# free

total used free shared buffers cached
Mem: 515588 295452 220136 0 2060 64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608

其中第一行用全局角度描述系统使用的内存情况:
total——总物理内存
used——已使用内存,通常状况这个值会比较大,由于这个值包括了cache+应用程序使用的内存
free——彻底未被使用的内存
shared——应用程序共享内存
buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增长)
cached——缓存,用于已打开的文件
note:
total=used+free
used=buffers+cached (maybe add shared also)

第二行描述应用程序的内存使用:
前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值
后个值表示+buffers/cache——全部可供应用程序使用的内存大小,free加上缓存值
note:
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached

第三行表示swap的使用:
used——已使用
free——未使用

手动执行sync命令(描述:sync 命令运行 sync 子例程。若是必须中止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将全部未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)

[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3


!将/proc/sys/vm/drop_caches值设为3


有关/proc/sys/vm/drop_caches的用法在下面进行了说明
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become
free.

To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.

Because this is a non-destructive operation and dirty objects