我需要在 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 与 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
这取决于您的使用应该反映什么。In
free
的输出:“总 - 可用”的含义类似于“当前正在使用且不可替换的物理内存”。这与“使用”之间的区别,即您提到的 5GB 和 15GB,是当前存储在其他地方尚不可用的数据的物理内存量,即脏缓冲区(因此您的 PostgreSQL 有更多数据等待访问磁盘)。“可用”反映了程序可以请求的最大物理内存量而不会被强制交换(尽管没有任何保证,如果一个程序要使用那么多内存,它无论如何都不会交换,因为系统的其余行为在时间)。
因此,您的两个值都反映了已用内存,但定义略有不同。您使用哪一个取决于您(或您的要求)。“Available”比“used”更准确,所以如果你只想保留一个,它可能是一个更有用的值。
另一种思考方式是考虑价值观回答了哪些问题:
没有完美的折衷方案,这就是为什么要
free
显示这两个值。linux 内存管理系统中立即可用的内存以及如何跨发行版可移植地获取可用内存量?提供有关“可用”的确切含义的更多详细信息。它不等同于“buff/cache”,因为后者包括不可回收的内存(因为它尚未写入磁盘),还有其他可回收但不计入“缓冲区/缓存”。
除了现有的答案:
这个“简单”的问题涉及到一个非常重要的话题:内存管理。这甚至是内核的主要“子系统”。“购买更多内存”仍然普遍适用。但无论你有多少:每个操作系统都必须处理 RAM 共享变成拥塞、交换、颠簸的情况。
有效使用和资源耗尽之间有一条细线。我浏览了你的数字并有这样的解释:
爪哇:
“已使用”显示“总数”的 83%。那是高。并且交换处于活动状态;非常小,仍然有可用空间。
“免费”显示了问题。不到 1%。16%在哪里?就是所谓的“可用”,这里是16GB,大约是16%。
“共享”(4G)加上“buff/cache”(19G)比这些“可用”16G多一点——反映内核可以“牺牲”三分之二。但是java现在在系统上运行的方式,结果就是这样。
所以这个缺失的第六个,x = total - (used+free) (132G - (110+1)),在这里是 21G,介于 "avail" (16G) 和 "sh" + "b/c" (23G) 之间一起)。
你必须
free
从左到右阅读,首先检查“交换”,然后询问它是如何使用的:作为“共享”和/或“缓冲/缓存”,以及其中有多少是“可用的”。激活交换和“免费”低于 1% 显示红灯,但 16% 可用且交换详细信息显示“正常”。
(我认为swap对于132G来说太小了;我希望java服务也在做点什么)
SQL 示例:
这显示了它“应该”如何:足够的 RAM 以及应用程序和操作系统一起工作:
仅使用了 5%。但是 50% 不是免费的。它们用作“共享”并保留为“buff/cache”。交换未激活。同样,您无法获得全部的 61G,而是其中的很大一部分。
定义新词没有用——这是一个解释的问题。最后是内核知道,并且
free
非常适合顶级概述。你必须问“操作员”他想要什么,现在有了这些信息,或者现在你甚至不问就知道了。