次のコマンドを使用して、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のうち)の場合、sort
2 GBのRAMが使用されます。さらに、/ bigdiskに多くの2 GBファイルを作成し、最後にマージソートする必要があります。
答え2
私の意見の答え:
/run/shm
/bigdisk
一時ファイルを保存するときにもsort
同じ問題が発生しました。/run/shm
RAMディスクなので、ソートのために結果の一部をディスクにキャッシュする必要がある場合(メモリがいっぱいになった場合)、メモリが使い果たされます。カーネルは、sort
最も多くのメモリを使用するプロセスなので終了します。
RAMディスクの代わりに物理ディスクに格納されている場所を使用すると、この問題は解決されます。
答え3
設定してみてくださいvm.overcommit_memory = 1
:«...
このフラグが1の場合、カーネルは実際にメモリが不足するまで常に十分なメモリがあるふりをします。
… »
そしてするスワップを使用してください。