Linux下内存释放问题相关知识续——手动释放内存的伪命题

本文解释了Linux系统如何高效管理内存,特别是在文件拷贝等操作后内存占用情况。通过解析top命令输出,阐述了Linux如何自动调整缓存和缓冲区大小以优化IO性能,并指出手动释放内存的做法是一个误区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Linux会发现一个很奇怪的问题:使用一段时间后(特别是经过了文件的拷贝等操作),用top指令发现内存基本上被占用了,而且Linux不会释放,这个问题的确困扰了我们,我们就开始寻找手动释放内存的方法,的确也找到了,也就产生了我的上一篇博客。上网搜索也发现很多人存在着这个问题,但是经过对网上结果和我自己理解的综合分析得出了一个结论:Linux手动释放内存是一个彻彻底底的伪命题。

 

首先讲解一下top的每个选项的含义:

total:所有应用程序可用物理内存
free
:未被应用程序使用的内存

used:
已使用内存

total=free+used

shared:
被共享库所占用的共享内存

buffers:
用于文件缓冲的内存

cached
:内核缓冲虚拟内存

shared,buffers,cached
均包含在used中。

 

实际上内核结束一个程序后,它是会释放内存的,但是内核并没有立刻将这部分收集到free当中,而是存在在cached或者buffer当中,提高系统的io效率,cachebuffered的内存是由内核进行动态的配置管理,如果系统的free大小不够的时候,系统会自动释放cache buffer的内存给程序使用。(因此如果是看到used很多,来手动释放内存其实是不需要的)

 

也就是说Linux会尽可能多的使用内存来提升系统的速度和io效率,但是它有相应的机制来释放内存,其实我们可以简单的理解cachebuffer也是free的空间。

什么时候代表你的内存是不够的呢:就是used很多,但是cachebuffer占的比例很小,说明内存不够了。看到很多网友说看到used占了很多,free很少不爽,简单的心理:free的内存越多看着越快乐??是吗??那可以建议gnufree的内存显示为cached和buffer的总和,相信网友肯定满意了。送各位一句话:Linux的内存是用来用的,windows的内存是用来看的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值