为什么我的系统没有释放缓冲区/缓存
Why my systems doesnt free the buffers/cache
我有一个内存不足的应用程序。我让它在一个32GB RAM的系统上运行了一整夜。同时运行free -m -s 20
,查看内存状态的变化情况。我的应用程序是我重新启动Ubuntu
后手动启动的唯一东西(当然除了终端)。让我们看看输出的部分:
应用程序启动时:
total used free shared buffers cached
Mem: 32100 1428 30671 35 69 594
-/+ buffers/cache: 765 31335
Swap: 32693 0 32693
应用程序结束前:
total used free shared buffers cached
Mem: 32100 31860 240 84 2 17420
-/+ buffers/cache: 14437 17663
Swap: 32693 12 32681
应用程序结束后:
total used free shared buffers cached
Mem: 32100 18723 13376 84 2 17434
-/+ buffers/cache: 1285 30814
Swap: 32693 12 32681
状态保持了好几个小时,直到我早上回来。
我的问题是:为什么我的大部分记忆仍然被认为是buffers/cache
的free
部分?这部分内存何时会再次成为整个Mem:
的free
部分
我然后打开了一个浏览器、一个IDE和一些其他GUI应用程序,以查看如何以及从哪里将内存分配给新应用程序:
total used free shared buffers cached
Mem: 32100 20378 11721 88 160 18075
-/+ buffers/cache: 2143 29956
Swap: 32693 12 32681
显然,Mem:
和buffers/cache:
的空闲内存都被分配给了新的应用程序。你能帮我翻译一下吗?
缓存的数据也是已用内存的一部分。程序结束后,程序从磁盘加载的数据将成为缓存的一部分。因此,如果再次需要内存,系统不会释放任何数据,但会丢弃缓存的数据。一个或多或少有趣的页面,描述这个问题。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- cmake更新缓存的变量
- 试图对缓存进行跨步测试,但程序并没有结束
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 通过ccmake在cmake中缓存依赖选项
- 有没有办法在缓存中保持空升压循环缓冲区的前端热
- 设备驱动程序内存缓冲区处理器缓存问题
- 为什么我的系统没有释放缓冲区/缓存
- 我应该缓存OpenGL状态,比如当前绑定的缓冲区,还是OpenGL会这样做