我已经在服务器上安装了 Ubuntu 14.10。服务器的主要任务是运行 MongoDB 安装以及多个 NodeJS 应用程序。NodeJS 应用程序将持续运行并接受来自外部的请求。
时不时地会有大量请求出现,导致某些 NodeJS 应用程序在短时间内使用大量 RAM。我一直在努力监测这一情况,但不确定如何看待我的发现。
到目前为止,我已经使用了两个命令来了解 RAM 使用情况。这些都是
free -m
Run Code Online (Sandbox Code Playgroud)
和
sudo htop
Run Code Online (Sandbox Code Playgroud)
第一个显示了这一点:
total used free shared buffers cached
Mem: 3442 3158 283 6 111 1203
-/+ buffers/cache: 1842 1599
Swap: 0 0 0
Run Code Online (Sandbox Code Playgroud)
当我看到这个时,我会说大约 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]
Run Code Online (Sandbox Code Playgroud)
我现在真的不知道如何阅读这个。有人可以帮我从这里出去吗?
我想我的问题最终归结为这些:
TL;DR:只要该-/+ buffers/cache行显示足够的可用内存,您就不必担心。如果它显示可用内存较低并且您不断被swap写入磁盘,那么您需要担心。
解释:
您对当前的 RAM 使用情况感到满意。让我们把free -m它的输出分解一下:
所有列都是free -m不言自明的。需要注意的重要一点是,当内存使用率很高而看不到缓存和缓冲的内存量时,您不需要惊慌。
从输出来看,您已经使用了 3442 MB RAM 中的 3158 MB,简单的减法就会表明您只有 283 MB 的可用空间可分配给新程序。这是不对的,您还需要查看cached和buffers列,cached它们将显示 RAM 缓存的磁盘数据量,以便更快地访问常用文件,并buffered显示要写入磁盘的数据量。
如您所知,磁盘访问比 RAM 慢得多,因此为了提高性能,将一些磁盘数据存储到 RAM 中是一件好事。您有 1203 MB 的缓存数据和 111 MB 的缓冲数据。这是一件好事,您的内存可以缓存这么多内存,而不只是保持这么多 RAM 空闲。这将大大提高你的表现。
要获取在没有缓存/缓冲的情况下正在使用的实际 RAM 量,请查看该-/+ buffers/cache:行。显示的结果是减去缓存/缓冲量。正如您所看到的,您有 1599 MB 的可用空间,因此在此状态下一切似乎都正常。如果您看到该行中的值较低,那么您需要关注并查看 RAM 使用情况。
另请注意,当要启动新程序且缓存后内存不足时,旧的缓存将自动清除,为新程序腾出空间。因此,只要实际内存使用率不高,并且不断地将内存交换到磁盘,那么在缓存中拥有大量内存是一件好事,因为它可以有效地“使用”内存。