Linux - 手动释放Linux服务器内存(具体操作步骤)

Linux服务器在发现内存不足时,会自动清理cached区域,释放内存,然后继续增大cache,free继续减少。其实手动降低内存使用率的方法也就是图一时之快而已

在服务器运行过程中,使用free -m查看服务器内存时,经常会发现free值很小,有些同学就会很紧张,总想采取一些措施,使得free值看起来高一点,心里就比较爽一点。其实,个人觉得这完全是图一时之快,没什么实质性用途。

一、大众释放内存方法
1. 首先使用free -m查看剩余内存

复制代码 代码如下:

linux-8v2i:~ # free -m
             total       used       free     shared    buffers     cached
Mem:          3952       2773       178          0         130        1097
-/+ buffers/cache:       1545       2406
Swap:         2055          0       2055

2. 执行sync命令
使用sync命令以确保文件系统的完整性,sync 命令运行 sync 子例程,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。
复制代码 代码如下:

linux-8v2i:~ # sync

3. 修改/proc/sys/vm/drop_caches
复制代码 代码如下:

echo 3 > /proc/sys/vm/drop_caches

说明:
1>. /proc是一个虚拟文件系统,我们可以通过对它的读写操作作为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。也就是说我们可以通过调整/proc/sys/vm/drop_caches来释放内存。

2>. 关于drop_caches的官方说明如下:
复制代码 代码如下:

Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to becomefree.

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 are not freeable, the user should run sync first.


3>. Linux内核会将它最近访问过的文件页面缓存在内存中一段时间,这个文件缓存被称为pagecache。

4.再使用free -m查看剩余内存,情况如下:

复制代码 代码如下:

linux-8v2i:~ # free -m
             total       used       free     shared    buffers     cached
Mem:          3952       1773       2325          0         0        80
-/+ buffers/cache:       1545       2406
Swap:         2055          0       2055

二、Linux内存分析
1. 首先对free -m查看结果进行分析
复制代码 代码如下:

linux-8v2i:~ # free -m
             total       used       free     shared    buffers     cached
Mem:          3952       2773       178          0         130        1097
-/+ buffers/cache:       1545       2406
Swap:         2055          0       2055

各参数含义:
•total:总物理内存
•used:已使用内存
•free:完全未被使用的内存
•shared:应用程序共享内存
•buffers:缓存,主要用于目录方面,inode值等
•cached:缓存,用于已打开的文件
•-buffers/cache:应用程序使用的内存大小,used减去缓存值
•+buffers/cache:所有可供应用程序使用的内存大小,free加上缓存值

其中:
•total = used + free
•-buffers/cache=used-buffers-cached,这个是应用程序真实使用的内存大小
•+buffers/cache=free+buffers+cached,这个是服务器真实还可利用的内存大小

2. Linux的内存分配方式
大家都知道,Linux服务器为了提高效率,会提前申请内存,即使这些内存没有被具体应用使用,Linux也会提前申请这些内存,然后利用这些内存做缓存用,即将刚打开的文件系统存入cache中,这样对应的服务器free值会越来越少,buffers和cached会越来越大,因此给大家表象就是内存越来越少了,大家就紧张了;其实,大家完全不用紧张,Linux服务器在发现内存不足时,会自动清理cached区域,释放内存,然后继续增大cache,free继续减少。因此,那样手动降低内存使用率的方法,其实就是图一时之快,呵呵。




在Linux下,内存不会自动释放。当频繁读取文件过多之后就会出现free内存很小的表象,效果如下:

image1.png

请注意,上图显示已使用内存:7364432,是包含后面buffers和cached的。并不代表实际物理内存使用到了7.3G,实际使用的物理内存是下面显示去掉buffers和cache后的:828144。我们看到cached居然使用了6G之多,其实就是上面说的内存没有自动释放而已。。如果想手动释放内存,请执行下面命令即可。

释放内存:

/bin/sync

/bin/echo "1">/proc/sys/vm/drop_caches

操作之后再来看看内存使用情况:

image2.png

相关引用如下:

/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
are not freeable, the user should run sync first.


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值