2013-03-07 18 views
8

Próbuję utworzyć poprawkę przy użyciu dwóch dużych folderów (~ 7 GB).Pamięć wyczerpana: w przypadku dużych plików przy użyciu diff

Oto jak ja to robię:

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

Ale może ze względu na rozmiary plików, patch nie jest uzyskiwanie tworzone i daje błąd:

diff: pamięć wyczerpana

Próbowałem czyniąc przestrzeń więcej niż 15 GB, ale problem nadal występuje.

Czy ktoś może mi pomóc z flagami, których powinienem użyć?

+2

I googled "diff duże pliki linux" i znalazłem [to] (http://unix.stackexchange.com/questions/2150/diffing-twoj-big-text-files) wśród wielu innych linków, możesz na przynajmniej udawaj, że zrobiłeś jakieś badania ... to też jest poza tematem. – Thomas

+1

Tak, próbowałem google i znalazłem kilka zmian parametrów i nadal występuje błąd "pamięci wyczerpany", nawet jeśli używa się flagi "--speed-large-files". – pritam

+1

Co powiesz na rozłożenie ich na wiele kroków? na przykład podziel foldery na, powiedzmy, bloki 1GB, diff, a następnie połącz łatę, chociaż nie jestem pewien, czy diff może być podzielony w ten sposób (więc możesz potrzebować dodatkowej logiki, aby zastosować łatkę). Dlaczego rozprowadzasz foldery o pojemności 7GB? Z pewnością zmieniły się tylko niektóre pliki/foldery wewnątrz niego? – Thomas

Odpowiedz

12

Niedawno też się z tym zetknąłem, kiedy musiałem rozróżnić dwa duże pliki (> 5 Gb każdy).

Próbowałem użyć "diff" z różnymi opcjami, ale nawet --speed-large-files nie przyniósł żadnego efektu. Inne metody, takie jak dzielenie plików na mniejsze, za pomocą xdelta lub sortowanie plików według this suggestion również nie pomogły. Dostałem nawet w ręce bardzo wydajną maszynę wirtualną (> 72 GB RAM), ale wciąż mam ten błąd memory exhausted.

I wreszcie pracować dodając następujący parametr do sysctl.conf (sudo vim /etc/sysctl.conf):

vm.overcommit_memory=1 

, aby upewnić się, że parametr jest rzeczywiście stosowana można uruchomić

sudo sysctl -p 

Nie zapomnij aby zmienić ten parametr ponownie po zakończeniu!

+1

Dzięki za edycję, jestem newby w stackoverflow. Ponadto, niektórzy wyjaśniają ten parametr: vm.overcommit_memory ma trzy wartości (0,1,2) i ustawia tryb księgowania pamięci wirtualnej jądra. "człowiek 5 proc" 0: heurystyczny overcommit (to jest domyślne) 1: zawsze przesadny, nigdy nie sprawdzaj 2: zawsze sprawdzaj, nigdy nie przesadzaj – Igor

+1

Jestem naprawdę trochę smutny z powodu tego, że tak interesujący i niestandardowy anwser, znaleziony przeze mnie i udostępniony, wykonał dla mnie tylko +2 powtórzenia. podczas gdy historia scho0l, jak grałem z pythonem, o wiele bardziej nudne, dał mi znacznie więcej @pritam – Igor

+1

Zgadzam się, ciekawe, niestandardowe i zadziałało dla mnie! Porównując dwa pliki 70 GB widzę np.317TB pamięci RAM wirtualnej i 150TB ... porównanie, które nie mogło zostać uruchomione, nawet teraz z 250 GB pamięci RAM. Bardzo mądry! –

Powiązane problemy