Unixソートメモリ不足

Unixソートメモリ不足

次のコマンドを使用して、Fedora 18で2億行の25 GBファイルをソートしています。

ソート -S 10G -T /bigdisk 大容量ファイル

メモリがないため、プロセスは終了します。プロセスが死ぬ前に私のRAM(12GBの空き容量)を使い果たしておらず、ディスク容量も大丈夫でした。

理由の提案をいただきありがとうございます。私は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のうち)の場合、sort2 GBのRAMが使用されます。さらに、/ bigdiskに多くの2 GBファイルを作成し、最後にマージソートする必要があります。

答え2

私の意見の答え:

/run/shm/bigdisk一時ファイルを保存するときにもsort同じ問題が発生しました。/run/shmRAMディスクなので、ソートのために結果の一部をディスクにキャッシュする必要がある場合(メモリがいっぱいになった場合)、メモリが使い果たされます。カーネルは、sort最も多くのメモリを使用するプロセスなので終了します。

RAMディスクの代わりに物理ディスクに格納されている場所を使用すると、この問題は解決されます。

答え3

設定してみてくださいvm.overcommit_memory = 1:«...

このフラグが1の場合、カーネルは実際にメモリが不足するまで常に十分なメモリがあるふりをします。

… »

そしてするスワップを使用してください。

関連情報