2013-03-07 60 views
8

我正在嘗試使用兩個大尺寸文件夾(〜7GB)創建修補程序。內存耗盡:用於使用差異的大文件

這裏是我如何做它:

$:#DIFF -Naurbw。 ../other-folder> file.patch

但可能是由於文件大小,不獲取創建補丁並給了一個錯誤:

DIFF:內存耗盡

我試圖使空間超過15 GB但仍然存在問題。

有人可以幫我拿出我應該用的旗幟嗎?

+2

我搜索了「diff large files linux」,並在其他很多鏈接中找到[this](http://unix.stackexchange.com/questions/2150/diffing-two-big-text-files),你可以在至少假裝做了一些研究...這也是題外話。 – Thomas 2013-03-07 05:55:44

+1

是的,我試着用Google搜索它,發現一些參數變化,即使使用「-speed-large-files」標誌,「內存耗盡」錯誤仍然存​​在。 – pritam 2013-03-07 06:15:44

+1

怎麼樣分多個步驟?例如將文件夾拆分成1GB塊,diff,然後連接修補程序,但我不確定是否可以像這樣拆分diff(所以您可能需要一些額外的邏輯來應用修補程序)。你爲什麼在第一個地方分配7GB文件夾?當然只有其中的一些文件/文件夾已經改變了? – Thomas 2013-03-07 06:19:22

回答

12

最近我遇到了這個,當我需要區分兩個大文件(每個> 5Gb)時。

我試着用不同的選項使用'diff',但即使是--speed-large-files也沒有效果。其他方法如將文件拆分爲更小的文件,使用xdelta或按this suggestion對文件進行排序也無濟於事。我甚至把我的手放在一個功能非常強大的虛擬機(> 72Gb RAM)上,但仍然有這個memory exhausted錯誤。

我終於加入下面的參數sysctl.confsudo vim /etc/sysctl.conf)工作:

vm.overcommit_memory=1 

爲了確保該參數確實應用可以運行

sudo sysctl -p 

不要忘記完成後更改此參數!

+1

感謝您的編輯,我是newover at stackoverflow。 此外,有些解釋此參數: vm.overcommit_memory有三個值(0,1,2)並設置內核虛擬內存記帳模式。 'man 5 proc' 0:啓發式過度使用(這是默認設置) 1:總是過量使用,從不檢查 2:總是檢查,從不過度使用 – Igor 2015-02-18 07:53:58

+1

我對這樣一個有趣而不規範的事實感到有點難過anwser,由我發現並共享,僅爲我做了+2次代表。雖然scho0l的故事,我如何玩python,更無聊,給了我更多@pritam – Igor 2015-03-20 08:51:42

+1

我同意,有趣,非標準,它爲我工作!比較兩個70GB文件,我看到例如317TB虛擬內存和150TB駐留內存......即使250GB內存尚未運行之前的比較現在也完成了。非常聰明! – 2016-03-17 17:02:33