我运行了下面的脚本
ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]/1024/1024}}' | sort -nk2 -r
它显示内存使用量约为 12GB,但是 top 命令显示总内存为 66 GB,已用内存为 63 GB,可用内存为 3 GB
上述数字为近似值。这是使用命令显示类似数字的更新free -m
:
total used free shared buffers cached
Mem: 64521 64087 433 0 2071 51567
-/+ buffers/cache: 10449 54072
Swap: 63999 1 63998
当上面的命令显示使用的是 12 GB 时,为什么使用了 63 GB?
我的服务器行为不当,当根据 top 命令的可用内存较低时,进程开始挂起
这是一台具有 66GB RAM 的 HP 服务器,运行 Oracle Enterprise Linux 6.3 64 位(基本上是 Red Hat)
有什么线索吗?
答案1
您的服务器没有行为异常。您在如何解释 的输出上犯了错误free
。看https://serverfault.com/questions/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free:“buffers”和“cached”指定内存“正在使用”,但可以立即删除缓存。这就是为什么“缓冲区”和“缓存”计入应用程序实际可用的内存量。
http://thoughtsbyclayg.blogspot.com/2008/09/display-free-memory-on-linux-ubuntu.html说
当考虑“有多少内存是真正空闲的”时,我想计算:
“free”+(“buffers”+“cached”)
在您的示例中,有 54 GB 内存可供应用程序使用。