更新:
这是由于 nss-softkn 的一个已知问题引起的。请参阅此文章: https://www.splyt.com/blog/2014-05-16-optimizing-aws-nss-softoken
当我从 centos 6.5 机器运行 free -m 时,我发现只有大约 1400 mb 的可用内存,包括缓存。当我执行 top、按内存排序并添加进程时,我只看到大约 1600 个进程正在使用。我应该有更多的可用内存。我们的几个机器都出现了这种情况。
[root@db1 ~]# free -m
total used free shared buffers cached
Mem: 7840 7793 47 0 287 1357
-/+ buffers/cache: 6148 1692
Swap: 7983 7 7976
顶部输出
以下是一个更好的方法来可视化进程所消耗的内存:
答案1
1692m
根据 Linux,您有大约的可用内存。
在顶部的“Mem”行中,似乎您的内存已使用近 99% (7793m / 7840m),但实际上您仅使用了大约 78% 的可用内存。另请参阅http://www.linuxatemyram.com/以获得更深入的解释。
免费与 Top 与 /proc/meminfo
进程内存。
将 中的进程使用的内存相加top
,并尝试将其与 的已用内存进行匹配,free
这会让您非常头疼。由于top
分页,您可能甚至无法获得此列表中的所有进程,更好的方法是使用ps aux --sort -rss
按内存使用情况对进程进行排序。
磁盘缓存。Linux
将使用您未使用的内存来在后台为您提高运行速度。这在free
的“缓存”列中有所说明,因此您应该查看“-/+ 缓冲区/缓存”旁边的值以了解实际使用和空闲的内存。
内核 Slab 缓存.
内核模块和驱动程序有办法使用未使用的内存也。“SReclaimable”是您在内存压力下可以使用的内存。有一个很酷的工具slabtop
可以识别内核是如何缓存这个的。
清除缓存。
echo 1 > /proc/sys/vm/drop_caches
释放页面缓存
echo 2 > /proc/sys/vm/drop_caches
释放 dentry 和 inode
echo 3 > /proc/sys/vm/drop_caches
释放页面缓存、目录项和 inode
也可以看看
答案2
我在这里发现了问题。我需要查看 /proc/meminfo,看看内核缓存了哪些内容作为 slab 空间。我的问题是无法理解 top/ps/free 说我有多少“可用”内存。事实上,这些数字加起来不对。“free”命令会告诉我,我大约有 1692mb 可用,但我的进程总共只占总内存的 20% 左右。
这篇文章描述了我的具体问题:
http://blog.logicmonitor.com/2014/10/09/more-linux-memory-free-memory-that-is-not-free-nor-cache/
答案3
基于http://blog.logicmonitor.com/2014/10/09/more-linux-memory-free-memory-that-is-not-free-nor-cache,我创建了一个名为 free 的脚本(我将其放在 .bash_profile 中 /usr/bin 前面的路径中),它产生了有用的结果:
#!/usr/bin/perl
$result = `/usr/bin/free`;
print "$result";
if ($result =~ /cache:\s+(\d+)/)
{
$mem = $1;
$slab = `cat /proc/meminfo|grep SReclaimable`; $slab =~ s/[^\d]//g;
print "Slab $slab\n";
print "Actual Used ** ",$mem-$slab," **\n";
}
答案4
我认为您误读了缓冲区/缓存 - 根据 +/- 缓冲区/缓存行,有 > 6 GB 被用作内存缓存。如果需要,可以将其占用 - 因为不需要,所以操作系统会使用它来缓存磁盘读取和类似操作。