机器:戴尔r815,CentOS 5.4,256GB的RAM,4 x 12核心。
我们有一个具有275GB文件的应用程序。 它可以一次对20GB的数据进行sorting,即它可以在相同的文件中交换位并replace它们。 这一切工作正常。
最后一遍读取整个文件,然后在不同的20GB块上进行合并sorting,然后输出到一个全新的文件。
这个过程SEEMS运行好一段时间,它最终冲出50GB左右的磁盘。 此后的一段时间,整个机器开始吓坏了。
像ps -ef , ls -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。