Sort

如何對大文件進行排序?

  • December 27, 2019

我有一台配備 Intel(R) Pentium(R) CPU G640 @ 2.80 GHz 和 8 GB RAM 的 PC。我正在使用 EXT3 文件系統在其上執行 Scientific Linux 6.5。

在此設置中,我可以sort -u在 200 GB 文件上執行的最快方法是什麼?

我應該將文件拆分成更小的文件(小於 8 GB),sort -u然後將它們放在一起,然後以不同的大小sort -u再次拆分它們,等等?或者是否有任何排序腳本、程序可以用我有限的 RAM 處理這麼大的文件?

GNU sort(這是大多數 Linux 系統的預設設置)有一個--parallel選項。來自http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

‘–並行=n’

將並行執行的排序數設置為 n。預設情況下,n 設置為可用處理器的數量,但限制為 8,因為在那之後性能提升會逐漸減少。另請注意,使用 n 個執行緒會使記憶體使用量增加 log n 倍。另請參閱 nproc 呼叫。

由於您的 cpu 有 2 個核心,您可以執行以下操作:

sort --parallel=2 -uo list-sorted.txt list.txt

最好指定實際的核心數量,因為處理器具有超執行緒可能看起來更多。

您還可以嘗試nice影響處理器調度優先級並ionice影響 I/O 調度。您可以像這樣提高其他程序的優先級,我認為這不會為您節省大量資金,因為它們通常更適合確保後台程序不使用太多資源。無論如何,您可以將它們與以下內容結合使用:

nice -n -20 ionice -c2 -n7 sort --parallel=2 -uo list-sorted.txt list.txt

另請注意,正如Gilles評論的那樣,使用單個 GNU 排序命令將比任何其他分解排序的方法更快,因為該算法已經針對處理大文件進行了優化。其他任何事情都可能只會減慢速度。

引用自:https://unix.stackexchange.com/questions/120096