内存256GB的Linux / 48内核 – 机器开始宕机/窒息,剩下大量的内存

机器:戴尔r815,CentOS 5.4,256GB的RAM,4 x 12核心。

我们有一个具有275GB文件的应用程序。 它可以一次对20GB的数据进行sorting,即它可以在相同的文件中交换位并replace它们。 这一切工作正常。

最后一遍读取整个文件,然后在不同的20GB块上进行合并sorting,然后输出到一个全新的文件。

这个过程SEEMS运行好一段时间,它最终冲出50GB左右的磁盘。 此后的一段时间,整个机器开始吓坏了。

ps -efls -al这样的简单命令挂起很长时间,显示为100%的CPU(这只是一个核心)。

看看top内存统计数据,我发现它使用了大约120GB的内存(所以128GB的空闲空间),在“caching”部分下有120GB。

有没有人见过这种行为? 同样的过程在64GB内存的机器上运行正常 – 所以不知何故,我认为这与我在机器中的RAM的安装有关。

(正如我们所说的,我正在这款机器上运行除64GB之外的testing – 排除硬件问题)。

我可能在/etc/sysctrl.conf缺less一些vm参数?

谢谢!

你的问题让我想起了最近读到的一些东西:

http://jcole.us/blog/archives/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

这解决了NUMA体系结构(例如,您可能会发现的48核心AMD系统)如何影响内存分配和交换。 我不知道这是不是你碰到的,但听起来非常相似,可能值得一读。

即使这不是它为迷人的阅读做出的答案。

所以这似乎是64位Centos 5.4和64位Fedora 14中的一个内核错误。安装Centos 5.5之后,问题就消失了。

对不起,我没有更好的答案给大家…

您可以尝试在/etc/sysctl.conf中添加一行来指定只有在绝对必要时才使用swap。

swappiness = 0

您可能已经意识到此文件定义了全局设置,因此需要考虑此更改对环境中运行的其他应用程序的影响。

你的临时空间在哪里? 通常是临时的。 Tempfs从交换空间的内存中抽取空间,所以如果你在tempfs中结束了太多东西,它将触发交换I / O。

鉴于你正在合并的数据的大小,我会希望当你最后的合并时,swappiness。

将交换存储分布在多个磁盘上可能会有帮助。

虽然你可能没有交换,但你可能仍然是I / O绑定的。 LS的信息表明这一点。

我会看dstat -df的输出来显示磁盘统计信息,或者dstat -af (是的,这将是一个bajillion列的宽度;这是当你有48核心,并显示所有这些CPU使用率时会发生什么),如果你想看到这一切。

如果所有的CPU都很忙(合并sorting不是一个CPU密集型的任务),我会感到惊讶,但是你对I / O系统没有任何说法。 如果你有几个磁盘和一堆文件,你可能会颠倒磁盘寻找每个文件,以保持合并sorting。