我在服务器上安装了 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 缓存的磁盘数据量,以便更快地访问常用文件,并显示要写入磁盘的数据量。buffers
cached
buffered
众所周知,磁盘访问速度比 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
命令如何根据该文件计算内容。