Linux服务器行为异常

Linux服务器行为异常

我运行了下面的脚本

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 内存可供应用程序使用。

相关内容