如何全面了解 RAM 使用情况

如何全面了解 RAM 使用情况

我在服务器上安装了 Ubuntu 14.10。该服务器的主要任务是运行 MongoDB 安装以及几个 NodeJS 应用程序。NodeJS 应用程序将持续运行并接受来自外部的请求。

时不时地,大量的请求会导致一些 NodeJS 应用程序在短时间内使用大量 RAM。我一直在尝试监控这种情况,但不确定我的发现会带来什么结果。

到目前为止,我使用了两个命令来了解 RAM 使用情况。这些是

free -m

sudo htop

第一个显示的是:

                        total       used       free     shared    buffers     cached                                           
Mem:                     3442       3158       283          6        111       1203                                           
-/+ buffers/cache:                  1842       1599                                                                         
Swap:                    0          0          0    

当我看到这个时,我会说大约有 280MB 的 RAM 是空闲的。这似乎并不多。

htop 告诉我以下内容:

  1  [|||                                         0.8%]     Tasks: 61, 129 thr; 2 running
  2  [|||                                         1.0%]     Load average: 1.16 1.15 0.93
  Mem[|||||||||||||||||||||||||||||||||||||1979/3442MB]     Uptime: 29 days, 00:23:31
  Swp[                                           0/0MB]   

我真的不知道该怎么读。有人能帮我吗?

我想我的问题最终可以归结为以下几点:

  • 我如何才能了解有多少 RAM 可用?
  • 什么情况下 RAM 内存太小?300MB 算不算太小?太小太危险?

答案1

总结:只要行-/+ buffers/cache显示足够的可用内存,您就不必担心。如果它显示可用内存不足,并且您不断被swap发送到磁盘,那么您需要担心。

解释:

您对当前的 RAM 使用情况很满意。让我们来看看输出来free -m分解一下:

所有列free -m都是不言自明的。需要注意的是,当内存使用率很高时,您无需在没有看到缓存和缓冲的内存量的情况下感到恐慌。

从输出结果来看,您已使用了 3442 MB RAM 中的 3158 MB,简单的减法会显示您只有 283 MB 的可用空间可以分配给新程序。这是不对的,您还需要查看cached和列,它们将显示 RAM 缓存的磁盘数据量,以便更快地访问常用文件,并显示要写入磁盘的数据量。bufferscachedbuffered

众所周知,磁盘访问速度比 RAM 慢得多,因此为了提高性能,将部分磁盘数据存储到 RAM 中是件好事。您有 1203 MB 的缓存数据和 111 MB 的缓冲数据。您的内存缓存了这么多数据,而不是让这么多 RAM 处于闲置状态,这是件好事。这将大大提高您的性能。

要获取未使用缓存/缓冲时实际使用的 RAM 量,请查看该-/+ buffers/cache:行。此结果显示为减去缓存/缓冲量。如您所见,您有 1599 MB 可用空间,因此在此状态下一切似乎都正常。如果您看到此行中的值较低,则需要关注并查看 RAM 使用情况。

还要注意,当要启动新程序并且缓存后内存不足时,旧缓存将自动清除,为新程序腾出空间。因此,只要实际内存使用率不高并且您的程序不断被交换到磁盘,缓存中有足够的空间是件好事,因为它可以有效地“使用”您的内存。

答案2

heemayl 已经涵盖了有关实际可用内存的大量信息。我在这里的帖子只是几行代码,您可以将其添加到您的.bashrc别名中,以用作实际使用情况的快速概览:

free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'

示例输出:

$ free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x  }'                                                                 
Used 1.2G Out of 5.6G

如果你对更深入的记忆调查感兴趣,请使用cat /proc/meminfo,其中列出了大量的信息,以及这个博客将帮助您了解free命令如何根据该文件计算内容。

相关内容