阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux服务器如何释放内存空间

146次阅读
没有评论

共计 1046 个字符,预计需要花费 3 分钟才能阅读完成。

Linux 服务器运行一段时间后,由于其内存管理机制,会将暂时不用的内存转为 buff/cache,这样在程序使用到这一部分数据时,能够很快的取出,从而提高系统的运行效率,所以这也正是 Linux 内存管理中非常出色的一点,所以乍一看内存剩余的非常少,但是在程序真正需要内存空间时,Linux 会将缓存让出给程序使用,这样达到对内存的最充分利用,所以真正剩余的内存是 free+buff/cache

但是有些时候大量的缓存占据空间,这时候应用程序回去使用 swap 交换空间,从而使系统变慢,这时候需要手动去释放内存,释放内存的时候,首先执行命令 sync 将所有正在内存中的缓冲区写到磁盘中,其中包括已经修改的文件 inode、已延迟的块 I / O 以及读写映射文件,从而确保文件系统的完整性

说到清理内存,那么不得不提到 /proc 这一个虚拟文件系统,这里面的数据和文件都是内存中的实时数据,很多参数的获取都可以从下面相应的文件中得到,比如查看某一进程占用的内存大小和各项参数,cpu 和主板的详细信息,显卡的参数等等;相应的关于内存的管理方式是在 /proc/sys/vm/drop_chches 文件中,一定要注意这个文件中存放的并不是具体的内存内容,而是 0 - 3 这几个数字,通过文件大小只有 1B 也可以知道,而这些代号分别告诉系统代表不同的含义如下:

Linux 服务器如何释放内存空间

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

1:释放页缓存

2:释放 dentries 和 inodes

3:释放所有缓存

所以根据上面的说明,分别将 1,2,3 这 3 个数字重定向到 drop_caches 中可以实现内存的释放,一般释放内存都是重定向 3 到文件中,释放所有的缓存

那么下面举个例子,比如这里只释放页缓存,首先使用 free -h 查看当前内存剩余

当前内存剩余 66M 左右,另外 buff/cache 是 763M,根据上面说的现在真正的剩余内存应该是 800M 左右,首先写缓存到文件系统:

sync

然后执行下面命令释放所有缓存:

echo 3 > /proc/sys/vm/drop_caches

执行完之后,再次查看内存剩余:

Linux 服务器如何释放内存空间

会发现内存被释放了,可用内存变为 653M 左右。

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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计1046字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中