我使用top时,内存数据在概览区显示如下:
KiB Mem : 16092836 total, 143168 free, 11005184 used, 4944484 buff/cache
然后我使用m(交互命令)来切换内存数据显示模式:
KiB Mem : 88.7/16092836 [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ]
我的问题是: 的结果100*used/total
是68.3856
,是如何88.7
计算的?
答案1
正如您所想象的,该百分比相当于100*used/total
。
这个百分比100*(1-available/total)
与 令人困惑地不同100*used/total
。
这里,“可用”的含义与中所示的相同free
。
相关主题:
参考手册
行为是记录在参考手册中。
在备用内存显示模式中,显示两个简短的摘要行,其中包含以下元素:
a b c GiB Mem : 18.7/15.738 [ ... ] GiB Swap: 0.0/7.999 [ ... ]
其中: a) 是使用的百分比; b) 是可用总量; c) > 是这些表示的两个可视化图表之一。
对于物理内存,百分比代表全部的 减去估计的有用如上所述。 “Mem”图本身分为非缓存部分用过的以及任何未以其他方式解释的剩余内存有用。请参阅主题 4b。摘要区域命令和“m”命令提供有关该特殊 4 路切换的附加信息。
的源代码top
目前可以通过调查源码来验证。
传递到图形视图的数据
#ifdef MEMGRAPH_OLD
my_misc = my_qued;
#else
my_misc = MEM_VAL(mem_TOT) - MEM_VAL(mem_AVL) - my_used;
#endif
Graph_mems->total = MEM_VAL(mem_TOT);
Graph_mems->part1 = my_used;
Graph_mems->part2 = my_misc;
图表视图中的计算
if (these->total > 0)
scale = 100.0 / these->total;
rx.pcnt_one = scale * these->part1;
rx.pcnt_two = scale * these->part2;
if (rx.pcnt_one + rx.pcnt_two > 100.0 || rx.pcnt_two < 0)
rx.pcnt_two = 0;
rx.pcnt_tot = rx.pcnt_one + rx.pcnt_two;
传递到默认视图的数据
prT(bfT(0), mkM(MEM_VAL(mem_TOT))); prT(bfT(1), mkM(MEM_VAL(mem_FRE)));
prT(bfT(2), mkM(MEM_VAL(mem_USE))); prT(bfT(3), mkM(my_qued));
prT(bfT(4), mkM(MEM_VAL(swp_TOT))); prT(bfT(5), mkM(MEM_VAL(swp_FRE)));
prT(bfT(6), mkM(MEM_VAL(swp_USE))); prT(bfT(7), mkM(MEM_VAL(mem_AVL)));
snprintf(row, sizeof(row), N_unq(MEMORY_line1_fmt)
, scT(label), N_txt(WORD_abv_mem_txt), bfT(0), bfT(1), bfT(2), bfT(3));
Msg_row += sum_see(row, mem2UP);
关于报道的不一致之处
- 您是否检查过您匹配的快照是否是在相同的系统状态下生成的?如果同时打印,即使在默认视图下,所用内存也可能仅为 88.7%。
- 你的版本是什么
top
?内存窗口的当前行为已在3.3.10。 - 您在哪个平台上运行它?
似乎有一些标志可以更改传递给图形的数据。
进一步信息和审查后更正。