我正在 Fedora 18 上使用以下命令对包含 200M 行的 25 GB 文件进行排序:
排序-S 10G -T /bigdisk 大文件
由于没有记忆,我的进程被杀死。该过程在死亡之前并没有耗尽我的 RAM(12 GB 可用空间)并且磁盘空间也还可以。
任何有关原因的建议表示赞赏。我确信 sort 可以通过其分区和合并来管理这个问题。
来自 dmesg 的更多信息
[87278.935572] Out of memory: Kill process 1971 (sort) score 258 or sacrifice child
[87278.935574] Killed process 1971 (sort) total-vm:4512168kB, anon-rss:4237040kB, file-rss:584kB
答案1
不要使用-S 10G
,它太多了(并且可能没有按照您的想法进行)。 OOMkiller 启动做意味着您的系统正在使用所有内存。
根据使用的算法经过sort
,它将根据可用内存使用内存:TotalMem/8 和AvailableMem 之间最大数的一半。
例如,如果您有 4 GB 可用内存(8 GB 中),sort
则将使用 2 GB RAM。它还应该在 /bigdisk 中创建许多 2 GB 文件,最后对它们进行合并排序。
答案2
从我的评论中做出回答:
/run/shm
当我用作/bigdisk
存储sort
临时文件时,我遇到了同样的问题。/run/shm
是 RAM 磁盘,因此当排序需要在磁盘上缓存部分结果时(当内存几乎已满时),内存就会耗尽。内核被杀死sort
,因为它是使用最多内存的进程。
使用存储在物理磁盘上的位置而不是 RAM 磁盘解决了这个问题。