具有 256GB 内存 / 48 个核心的 Linux - 机器开始因剩余大量内存而出现故障/阻塞

具有 256GB 内存 / 48 个核心的 Linux - 机器开始因剩余大量内存而出现故障/阻塞

机器:Dell r815、CentOS 5.4、256GB RAM、4 x 12 核。

我们有一个应用程序,它有一个 275GB 的文件。它一次对 20GB 的数据进行就地排序,即交换位并在同一文件中替换它们。这一切都运行正常。

最后一步是读取整个文件并对不同的 20GB 块进行合并排序,然后将它们输出到一个全新的文件中。

这个过程似乎运行良好,但最终会将大约 50GB 的数据刷新到磁盘。此后不久,整个机器开始崩溃。

简单的命令(例如ps -ef,,ls -al)会挂起很长时间,并且显示占用 100% 的 CPU(仅仅是一个核心)。

查看内存统计信息top,我发现它使用了大约 120GB 的 RAM(因此有 128GB 可用),并且在“缓存”部分下有 120GB。

以前有人见过这种行为吗?同样的过程在具有 64GB 内存的机器上运行良好 - 所以不知何故我认为这与机器中的 RAM 安装有关。

(正如我们所说,我正在这台机器上运行除 64GB 以外的所有内存测试 - 以排除硬件问题)。

我是否可能遗漏了一些 vm 参数/etc/sysctrl.conf

谢谢!

答案1

您的问题让我想起了最近读到的一篇文章:

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

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

即使这不是答案,但它读起来也很有趣。

答案2

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

抱歉,我没有更好的答案给大家......

答案3

您可以尝试在 /etc/sysctl.conf 中添加一行来指定仅在绝对必要时使用交换。

交换性=0

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

答案4

虽然您可能没有使用交换,但您可能仍然受到 I/O 限制。ls 信息表明了这一点。

我会查看输出以dstat -df显示磁盘统计信息,或者dstat -af(是的,它将有数十亿列宽;当您有 48 个核心并显示所有核心的 CPU 利用率时会发生这种情况)如果您想查看所有内容。

如果所有 CPU 都忙着的话我会很惊讶(归并排序不是 CPU 密集型任务),但你没有提到你的 I/O 系统。如果你的磁盘很少但文件很多,那么你可能会因为搜索每个文件而让磁盘不堪重负,从而无法为归并排序提供数据。

相关内容