我知道“空闲的 RAM 就是浪费的 RAM”这个概念。我的问题是操作系统能够多快多高效地释放缓存的 RAM,以便应用程序在使用量激增时有足够的 RAM。
我们有一个托管在 Linux 上的 Web 应用程序。我们的内存利用率通常为 10-20%。但是,当调用某些代码部分时,内存利用率会飙升至 100% 左右。(代码已最大程度优化)。我想在发生这种情况时触发电子邮件。我应该编写一个脚本来监控内存利用率(包括缓存)还是仅监控应用程序内存?
当 Linux 中出现内存不足错误时,是否意味着缓存内存为零并且所有 RAM 已分配给应用程序?
答案1
是的,这意味着操作系统已清除了用于文件系统缓存的所有内存。基本上,您的网络服务器/应用程序正在占用malloc
一定量的内存,内核会释放内存并将其提供给应用程序使用。这是一个原子调用,根本不会阻止应用程序。
您只是需要服务器中更多的内存或处理更少的连接。
答案2
当发生 OOM 事件(例如 OOM 杀手)时,所有 RAM 和交换空间都会被占用,缓冲区和缓存空间处于最低水平,性能已经很差。请将内存使用率保持在 100% 以下。
在 Linux 上,您可以解释/proc/meminfo
MemAvailable
是在不交换的情况下可以分配多少的估计
MemFree + Buffers + Cached
实际上是免费的。