直接 GNU 排序会使用大量内存和许多核心

直接 GNU 排序会使用大量内存和许多核心

我有一个相当大的文本文件(19Gb,十亿行)和一个运行 Ubuntu 12.04 的相当大的服务器(16 核,64Gb 内存)来对其进行排序。

使用命令行sort实用程序(来自 GNU 核心实用程序)快速排序该文件的最佳方法是什么?

我相信我可以使用--parallel 15(留下一个核心空闲),可以使用诸如-T /run/shm/sortTmp将临时文件保存在 RAM 磁盘上之类的东西(所以速度很快)1,可以用来-S 50G利用可用内存,并可以进行调整--batch-size=15以减少临时文件的使用(这里我不确定一个好的值是多少..)。

还有其他选择可以考虑吗?什么是好的选择--batch-size?我还应该考虑其他事情吗?

当我进行排序时,机器上不需要运行任何其他东西,因此我可以使用它的所有资源。

1 -S与临时文件的 ram 磁盘结合使用是一个坏主意!sort当内核写入 RAM 磁盘并且内存几乎已满时,内核可能会杀死(请参阅这条评论

答案1

没有人回答,所以这就是我所做的:

sort -T /mnt/tmp --parallel=14 -S 50G myBigFile.txt

我没有使用,--batch-size因为我不确定什么是一个好的价值,而且大概sort是很聪明的。

/mnt安装在一个大的临时磁盘上(该机器是云中的虚拟机)。如果/tmp位于有足够空间的磁盘上,则可以省略-T.如果您有一个非常快且有足够空间的磁盘,请使用它。

如果我没记错的话,它再次需要与要排序的文件的大小相同的空间 - 基本上它将文件分成两个或多个块,每个块都可以在内存中排序,将它们存储在临时磁盘中,然后执行合并排序以产生最终输出。

相关内容