Linux 上的“有效使用”内存是什么? “已使用”或(“总计”-“可用”)?

Linux 上的“有效使用”内存是什么? “已使用”或(“总计”-“可用”)?

我需要在 GUI 中显示操作员使用的内存与 Linux 服务器上可用的内存

那么显示为用法的逻辑上正确的值是多少?

[root@host ~]# free
              total        used        free      shared  buff/cache   available
Mem:      131753676   110324960     1433296     4182648    19995420    16240640
Swap:       2097148      652076     1445072

used或者 (total- available)?

区别在于:110324960 vs 115513036 或 5188076 kb ~= ~5 GB 那么这 5 GB 是什么呢?它们是有效使用还是可用或不可用且未使用?内存使用率 % 中使用的显示哪个更正确?

这是针对 CentOS 7.3 PC,运行 2 个 java 服务

但 PostgreSQL 服务器上有完全不同的图片

[root@postgres_server1 ~]# free
              total        used        free      shared  buff/cache   available
Mem:      131753684     7364056    77736740    15598120    46652888   107942020
Swap:       2097148           0     2097148

used其中和 ( total- )之间的差异available要大得多: 16447608 kb ~=15.7 GB

答案1

这取决于您的用法应该反映什么。 Infree的输出:

  • “used”的计算方式为“total – free – buffers – cache”,因此它反映了当前存储有用数据的内存量,不包括cache;
  • “可用”应该是可以立即用于其他用途的物理内存量。

“全部可用”意味着“当前正在使用且不可替换的物理内存”。它和“已用”(您提到的 5GB 和 15GB)之间的区别是当前存储其他地方尚不可用的数据的物理内存量,IE脏缓冲区(因此您的 PostgreSQL 有更多数据等待写入磁盘)。 “可用”反映了程序在不被占用的情况下可以请求的最大物理内存量被迫交换(尽管没有任何东西可以保证,如果一个程序要使用那么多内存,考虑到当时系统的其余行为,它无论如何都不会交换)。

因此,您的两个值都反映了已用内存,但定义略有不同。您使用哪一种取决于您(或您的要求)。 “可用”比“已使用”更准确,因此如果您只想保留一个,它可能是一个更有用的值。

另一种思考方式是考虑价值观回答了什么问题:

  • “used”告诉您 128GiB RAM 对于您当前的工作负载是否有用;
  • “可用”告诉您还剩下多少容量;
  • “总计 - 可用”告诉您真正需要多少物理 RAM(IE如果您愿意失去缓存带来的性能提升,那么您的下一个服务器或虚拟机可以小多少)。

没有完美的妥协,这就是为什么free显示这两种价值观。

Linux内存管理系统中的内存立即可用如何跨发行版获取可移植的可用内存量?提供有关“可用”确切含义的更多详细信息。它并不等同于“buff/cache”,因为后者包含不可回收的内存(因为尚未写入磁盘),并且还有其他可回收的内存池,但不计入“ buff/缓存”。

答案2

除了现有的答案:

这个“简单”的问题涉及到一个非常重要的话题:内存管理。这甚至是内核的主要“子系统”。 “购买更多内存”仍然是普遍真理。但无论你有多少:每个操作系统都必须处理 RAM 共享变成拥塞、交换、颠簸的情况。

有效利用和耗尽资源之间存在着微妙的界限。我查看了你的数字并得出了这样的解释:

爪哇:

“used” 显示“total” 的 83%。这个数字很高。而且 swap 处于活动状态;非常小,并且仍有可用空间。

“免费”就说明了问题。小于1%。那16%去哪儿了?就是所谓的“可用”,这里是16GB,大约是16%。

“共享”(4G)加上“缓冲/缓存”(19G)比这些“可用”16G 多一点——反映出内核可能“牺牲”其中的三分之二。但是现在java在系统上运行的方式,就变成这样了。

所以这个缺失的第六个,x = 总计 - (已用+空闲) (132G - (110+1)),在这里是 21G,它在“avail”(16G) 和“sh”+“b/c”(23G) 之间一起)。

您必须free从左到右阅读,首先检查“交换”,然后询问它是如何使用的:作为“共享”和/或“缓冲/缓存”,以及其中有多少是“可用”的。

激活交换和“免费”低于 1% 时显示红灯,但 16% 可用且交换详细信息显示“正常”。

(我觉得swap对于132G来说太小了;我希望java服务也能正在做某物)


SQL 示例:

这显示了它“应该”如何:足够的 RAM 以及应用程序和操作系统一起工作:

仅使用了 5%。但 50% 不是免费的。它们用作“共享”并保留为“buff/cache”。交换未激活。再次强调,您无法获得全部 61G,但只能获得其中的很大一部分。


定义新词是没有用的——这只是解释的问题。最后是内核知道,并且free非常适合顶层概述。你必须问“操作员”他想要什么,现在有了这些信息,或者也许现在你甚至不用问就知道了。

相关内容