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


30

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

从论坛中,我发现可以从以下位置找到正确的内存:

free -m

结果:

-/+ buffers/cache:        492       1555

-/ +缓冲区/高速缓存:包含正确的内存使用情况。我不知道如何解析此信息,或者是否有任何其他命令来获取百分比使用的内存。


3
已经在这里回答了! stackoverflow.com/questions/10585978/… 例如: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher 2014年

@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}'
Simply_Me 2014年

在不知道您需要什么号码的情况下,很难告诉您应该使用什么号码。但是,在许多情况下,这些数字中的任何一个都是非常幼稚的,并且需要趋势和上下文信息。
eckes

Answers:


33

这是免费的示例输出:

% 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

1
“-/ +缓冲区/高速缓存:5779440 18904464”是否在服务器上正确使用RAM /状态?
代码登录

2
严格来说,不,但是实际上。实际的内存使用量是第二行(已使用:20746840),但是部分内存使用量是缓冲区和高速缓存,它们只是为了加快系统上的响应时间。第三行(已使用:5779440)为您提供了程序实际使用的内存量,并且此内存数字确定了程序可以分配的内存量。如果您的目标是从某种意义上了解实际使用的程序以及可以实际分配的空间来获得可用的内存,那么可以,第3行对您来说是正确的。
casey 2014年

1
请注意,以较新版本的free-/+ buffers/cache完全是故意省略,并且在显示的值used列现在排除默认情况下,缓冲区和缓存。看到这里:bugzilla.redhat.com/show_bug.cgi?
id=1158828

10

我将提到如何解析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)应该构成系统中的实际已用RAM。它返回我697,这是第二行中实际使用的RAM输出。

现在,总可用量7869)- 实际使用量696)应该为您提供了7173可用内存,在这种情况下,它也作为第二行的输出获得。


6

虽然是@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
仅供参考,我得到以下使用used: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj

使用的完整命令是什么?我以centos对其进行了检查。
Simply_Me

抱歉,格式不正确,但您可以$ cat /etc/issue CentOS release 6.7 (Final) $ 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: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
kellyfj

对于某些版本的awk(mawk),需要将百分号加倍才能打印出来,否则awk会引发错误,例如:printf(“ used:%.0f %%”),$ 3 / $ 2 * 100 ma和g。
扬拉林斯基

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

在交换编号之后添加新行


1

对于高达CentOS 7的您可以尝试

cat /proc/meminfo 

查看进程的实际内存使用情况。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.