如何使用Linux命令获取已使用的内存(RAM已使用)?

如何使用Linux命令获取已使用的内存(RAM已使用)?

我正在尝试使用 Linux 命令检索已用内存(RAM)的百分比。我的 cpanel 显示已使用的内存,我需要在特定网页上显示它。

从论坛上,我发现正确的记忆可以从以下内容中找到:

free -m

结果:

-/+ buffers/cache:        492       1555

-/+ buffers/cache:包含正确的内存使用情况。我不知道如何解析此信息,或者是否有任何不同的命令来获取已用内存的百分比。

答案1

这是免费的示例输出:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

第一行数字 ( Mem:) 列出

  • total记忆
  • used记忆
  • free记忆
  • 的用法shared
  • 的用法buffers
  • 使用文件系统缓存 ( cached)

在这一行used 包括缓冲区和缓存这影响免费。这不是您的“真正的”可用内存,因为如果需要满足分配请求,系统将转储缓存。

下一行 ( -/+ buffers/cache:) 为我们提供了实际使用的内存和可用内存,就好像没有缓冲区或高速缓存一样。

最后一行 ( Swap) 给出了交换内存的使用情况。没有用于交换的缓冲区或缓存,因为将这些东西放在物理磁盘上是没有意义的。

要输出已用内存(减去缓冲区和缓存),您可以使用如下命令:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

这会抓取第三行并除以已用/总计 * 100。

对于空闲内存:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657

答案2

我将提到如何解析free命令信息。要查找百分比,您可以按照其他 2 个答案中的建议使用。

这已经解释得很清楚了这里。我会尝试根据我的系统中的内容进行解释。

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

现在,让我们看看各个数字实际上代表什么。

1号线

  • 7869指示我的机器可用的内存/物理 RAM。
  • 4402指示我的系统使用的内存/RAM。
  • 3466指示可用且可用于运行新进程的 RAM 总量。
  • 0 表示共享内存。此专栏已过时,可能会在未来的免费版本中删除。
  • 208 表示 Linux 中不同应用程序缓冲的 RAM 总量。
  • 3497表示用于缓存数据以供将来使用的总 RAM。

2号线

-/+ buffers/cache:        696       7173

如何计算Line2中得到的值696和7173?

已使用总量4402)--总缓冲 RAM208)--用于缓存的总 RAM3497)应构成实际使用的内存在系统中。它返回我第697章哪一个是实际使用的内存输出在第二行。

现在,可用总量7869)--实际使用696)应该给你空闲内存这是7173在这种情况下,它也会作为第二行的输出。

答案3

虽然一个复制正如 @szboardstretcher 所指出的,我对解决方案(在原始问题中)的偏好是下面的,特别是因为您想解析到网页。

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

输出:

used: 82.68%, buffers: 42.81%, swap: 1.27%

答案4

请注意,free3.3 及更高版本没有一行-/+ buffers/cache:,因此旧的答案将不起作用。在 3.3 中,free比较了“Mem”行中已使用的与可用的。以下内容适用于新旧版本的free.

free |  awk '$1 == "Mem:" {x= $7/($3+$7)*100} $2 == "buffers/cache:" {x= $4/($3+$4)*100} $1 == "Swap:" {print x}'  

相关内容