Linux 手工释放Linux Cache Memory

简介: Linux 手工释放Linux Cache Memory

手工释放Linux Cache Memory

为了加速操作和减少磁盘I/O,内核通常会尽可能多地缓存内存,这部分内存就是Cache Memory(缓存内存)。根据设计,包含缓存数据的页面可以按需重新用于其他用途(例如,应用程序)。

缓存内存在程序运行结束后不会自动释放。这可能会导致程序频繁读写文件后可用物理内存变得很少,必要时(比如内存确实不够用),需要主动释放缓存内存。

注意:一般情况下,是不推荐主动释放缓存内存的,除非你有非常明确的需求,比如测试程序缓存内存的使用情况,因为对同一应用程序来说,缓存内存是可用的。

释放缓存内容

可以通过修改系统控制文件/proc/sys/vm/drop_caches释放缓存内存。

1、释放pagecache(页面缓存)

echo 1 > /proc/sys/vm/drop_caches

2、释放reclaimable slab objects (includes dentries and inodes)(可回收slab对象(包括dentry,inode))

echo 2 > /proc/sys/vm/drop_caches

3、释放slab对象和pagecache

echo 3 > /proc/sys/vm/drop_caches

这是一种非破坏性操作(non-destructive operation),不会释放任何脏对象。如果要增加此操作释放的对象数量,可以在写入/proc/sys/vm/drop_cache之前运行sync。这将最大限度地减少系统上脏对象的数量,并创建更多待删除的候选对象。

需要注意的是/proc/sys/vm/drop_caches 不是用于控制,各种内核缓存(inodes,dentries,pagecache等等)增长的方法。当系统其它地方需要内存时,Linux内核会自动回收这些对象。

使用该文件可能引发性能问题。因为它会删除缓存对象,可能需要消耗大量的I/O和CPU才能重新创建被删除的对象,尤其是这些对象被大量使用的情况下。因此,不建议在测试或调试环境之外使用。

实践测试

# free -m
              total        used        free      shared  buff/cache   available
Mem:           7794        2373        1478         431        3942        4691
Swap:          3967           0        3967
# echo 1 > /proc/sys/vm/drop_caches
# free -m
              total        used        free      shared  buff/cache   available
Mem:           7794        2373        2600         431        2821        4705
Swap:          3967           0        3967
# echo 2 > /proc/sys/vm/drop_caches
# free -m
              total        used        free      shared  buff/cache   available
Mem:           7794        1635        5527         431         631        5495
Swap:          3967           0        3967
# echo 3 > /proc/sys/vm/drop_caches
# free -m
              total        used        free      shared  buff/cache   available
Mem:           7794        1635        5529         431         630        5496
Swap:          3967           0        3967

参考连接

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

目录
相关文章
|
5月前
|
Linux
linux下清理buffer/cache
linux下清理buffer/cache
|
2月前
|
存储 缓存 编译器
Linux kernel memory barriers 【ChatGPT】
Linux kernel memory barriers 【ChatGPT】
54 11
|
2月前
|
存储 缓存 Linux
Linux下的Cache和TLB刷新 【ChatGPT】
Linux下的Cache和TLB刷新 【ChatGPT】
68 11
|
3月前
|
存储 缓存 Linux
在Linux中,buffer和cache如何区分?
在Linux中,buffer和cache如何区分?
|
3月前
|
Linux
Linux——如何清除buff/cache
Linux——如何清除buff/cache
31 0
|
6月前
|
Linux
Linux操作系统调优相关工具(二)查看Memory运行状态相关工具
Linux操作系统调优相关工具(二)查看Memory运行状态相关工具
45 0
|
缓存 Oracle 关系型数据库
Linux 内存管理新特性 - Memory folios 解读
if (compound_head(page)) // do A; else // do B; folio 并不完美,或许因为大家期望太高,导致少数人对 folio 的最终实现表示失望。但多数人认为 folio 是在正确方向上的重要一步。毕竟后续还有更多工作要实现。
343 0
|
缓存 Linux
关于linux操作系统中的buff/cache
linux操作系统中的buff/cache学习
261 0
|
缓存 Linux 数据库
linux系统中buff/cache占用过高?不明白为何过高?
linux系统中buff/cache占用过高?不明白为何过高?
2521 1
|
关系型数据库 Linux API
Linux 内存管理新特性:Memory folios 解读
本文主要讲解folio ,极其在应用中的直接价值。