如何减少缓冲区\缓存

Muh*_*ana 5 rhel cache buffer mysql ram

监控系统不断提醒我的机器正在达到\突破它的 RAM 利用率阈值,即15 GBs

我做了一些阅读并了解到明显的 RAM 利用率并不是实际的,额外的 RAM 用于缓存\缓冲磁盘 I\O 操作以提高服务器的性能。我在该服务器上运行 MySQL,这是唯一值得注意的运行服务。

  • 那么如何减少磁盘 I\O 缓存\缓冲 RAM 以免突破阈值呢?这可能是 MySQL 的问题而不是 Linux 的问题吗?

这就是输出 free -gt

[root@ipk ~]# free -gt
             total       used       free     shared    buffers     cached
Mem:            15         15          0          0          0          9
-/+ buffers/cache:          5         10
Swap:            5          0          5
Total:          21         15          6
Run Code Online (Sandbox Code Playgroud)

Linux 版本是:

[root@ipk ~]# uname -rmo
2.6.32-220.el6.x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

ter*_*don 15

由于您似乎既不接受我们的意见,也不接受我们作为“官方”链接的各个页面,也许 Red Hat 官方文档会说服您:

在此示例中,可用内存总量为 4040360 KB。进程使用 264224 KB,其他应用程序免费使用 3776136 KB。不要被第一行显示 28160KB 是免费的搞糊涂了!如果您查看使用数据,您会发现大部分内存使用用于缓冲区和缓存。Linux 总是尝试通过将可用内存用于缓冲区(文件系统元数据)和缓存(具有文件或块设备的实际内容的页面)来使用 RAM 来加速磁盘操作。这有助于系统运行得更快,因为磁盘信息已经在内存中,从而节省了 I/O 操作。如果程序或应用程序(如 Oracle)需要空间,Linux 将释放缓冲区和缓存以为应用程序提供内存。 如果您的系统运行了一段时间,您通常会在第一行的“空闲”字段下看到一个小数字。

  • @PedroLobito 不,当然不是。为什么要这么做?重点是*这不算作已使用的RAM*。这些进程使用的所有 RAM 仍然可供任何请求它的程序使用。 (3认同)

小智 7

这一切都很好而且很花哨,但是在必须发出内存请求与将其映射到磁盘缓存必须释放的内容之间的延迟时间呢?当然,你可能会说它很小,甚至不明显,但也许我关心由于这个过程增加的 0.0000001 秒。你是谁来决定如何使用我的内存?

如果我不想经历这种滞后时间怎么办?也许我不介意我的应用程序从驱动器加载速度较慢,但​​希望它立即占用 RAM,而没有延迟时间从磁盘缓存中取消映射内存。

如何限制磁盘缓存占用的 RAM 量?不要告诉我这是在没有办法的情况下实现的。

更新:找到了一种方法。

echo 3 | sudo tee /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

做一:free -m运行以上确认后。有用。

  • 有些人没有运行库存的“服务器”或“桌面”应用程序,这可能会让您感到惊讶。在某些情况下,由于缓存,我们会遇到严重的性能下降。我们以 600000000Bytes/s 的速度从 ADC 获取数据,并经常将大块数据写入磁盘,同时在 GPU 中处理其他位。磁盘缓存既是福也是祸——当存储设备不能足够快地处理数据时,它可以处理积压,但在情况发生变化时也会限制我们。 (4认同)