Linux z 256 GB pamięci / 48 rdzeni - maszyna zaczyna bić / dusić się z resztkami pamięci


12

Maszyna: Dell r815, CentOS 5.4, 256 GB pamięci RAM, 4 x 12 rdzeni.

Mamy aplikację, która ma plik 275 GB. Wykonuje sortowanie na miejscu na 20 GB danych naraz, tzn. Zamienia bity i zamienia je w tym samym pliku. To wszystko działa dobrze.

Jest ostatnie przejście, które następnie odczytuje cały plik i sortuje scalanie dla różnych porcji 20 GB i wysyła je do całego nowego pliku.

Ten proces wydaje się działać przez pewien czas i kończy się wypłukaniem około 50 GB na dysk. Jakiś czas później CAŁA maszyna zaczyna wariować.

Proste polecenia, takie jak ps -ef, ls -alzawieszają się przez długi czas i pokazują się jako wymagające 100% procesora (co jest tylko jednym rdzeniem).

Patrząc na statystyki pamięci top, widzę, że zużywa około 120 GB pamięci RAM (więc 128 GB wolnego) i ma 120 GB w sekcji „buforowanej”.

Czy ktoś widział takie zachowanie wcześniej? Ten sam proces działa dobrze na komputerze z 64 GB pamięci - więc myślę, że ma to związek z mocowaniem pamięci RAM, którą mam na komputerze.

(jak mówimy, uruchamiam test na tym komputerze ze wszystkim oprócz 64 GB - aby wykluczyć problem ze sprzętem).

Czy może brakuje mi par vm /etc/sysctrl.conf?

Dzięki!


Co robią dyski .. Idziesz do piekła wymiany ????
Arenstar,

64-bitowe jądro / aplikacja / etc? wspomniałeś 100% procesora, jaka jest średnia obciążeń, kiedy to się dzieje, jest to aplikacja wielowątkowa (nie użyje wszystkich procesorów, jeśli nie), co mówi ci vmstat 4 (konkretnie io / cpu)
coredump

takie jak „ps” są w 100% cpu nie ma 4800% (bo 48 rdzeni) - więc najprawdopodobniej są blokowane przez io lub coś w tym rodzaju. średnia obciążenia na pudełku wynosi tylko 5. dyski, które są w stanie stałym, nie widzą dużo zapisów ... Wydaje się, że to bardziej problem z jądrem niż zasobami
aspitzer,

maszyna w ogóle się nie zamienia.
aspitzer,

1
tak .. teraz działa z 64 GB. powinien wiedzieć w ciągu godziny, czy ma to związek z całkowitą ilością pamięci w maszynie
aspitzer,

Odpowiedzi:


12

Twoje pytanie przypomniało mi coś, co ostatnio przeczytałem:

http://jcole.us/blog/archives/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

Rozwiązuje to wpływ architektury NUMA (np. 48-rdzeniowego systemu AMD) na alokację i zamianę pamięci. Nie wiem, czy na to się natrafisz, ale brzmiało to na tyle podobnie, że warto je przeczytać.

Nawet jeśli nie jest to odpowiedź, która stanowi fascynującą lekturę.


1
To wydaje się godne ujęcia problemu tego pytania. I to jest fantastyczna lektura.
coredump

1
To świetny odczyt i 4 gniazda, 256 GB pamięci RAM = 64 GB na węzeł, i wydaje się, że właśnie tam masz problemy, co dokładnie odwzorowuje sytuację w dokumencie.
Mark Henderson

12

Wygląda to na błąd jądra w 64-bitowym Centos 5.4 i 64-bitowym Fedorze 14. Po zainstalowaniu Centos 5.5 problem zniknął.

Przepraszam, nie mam lepszej odpowiedzi dla wszystkich ...


1
Hej, człowieku, jeśli to to naprawiło, właśnie to naprawiło. Daj sobie zaznaczenie, aby inni mogli uczyć się na twoich trudnościach :-)
mfinni

0

Możesz spróbować dodać linię do /etc/sysctl.conf, aby określić, że zamiana ma być używana tylko wtedy, gdy jest to absolutnie konieczne.

zamiana = 0

Być może już wiesz, że ten plik określa ustawienia globalne, więc należy wziąć pod uwagę wpływ, jaki ta zmiana będzie miała na pozostałe aplikacje działające w środowisku.


to jest już ustawione ... ale jak wspomniałem, 128 GB jest za darmo - więc nie ma problemów z zamianą.
aspitzer,

0

Gdzie jest twoja temp. Często jest to na tempfs. Tempfs pobiera to miejsce z pamięci utworzonej przez przestrzeń wymiany, więc jeśli skończy się zbyt wiele rzeczy w tempfs, uruchomi to we / wy wymiany.

Biorąc pod uwagę rozmiar danych, które scalasz, oczekiwałbym swapowości po ostatecznym scaleniu.

Rozłożenie magazynu wymiany na wiele dysków może pomóc.


0

Chociaż możesz nie uzyskiwać wymiany, nadal możesz być związany z operacjami we / wy. Informacja ls to sugeruje.

Chciałbym spojrzeć na dane wyjściowe, dstat -dfaby wyświetlić statystyki dysku, lub dstat -af(tak, będzie to bajillion szerokości kolumn; to dzieje się, gdy masz 48 rdzeni i pokazuje wykorzystanie procesora na wszystkich z nich), jeśli chcesz zobaczyć wszystko.

Byłbym zaskoczony, gdyby wszystkie procesory były zajęte (sortowanie korespondencji seryjnej nie jest zadaniem intensywnie obciążającym procesor), ale nic nie mówisz o swoim systemie I / O. Jeśli masz kilka dysków i kilka plików, możesz zepsuć dysk, szukając każdego pliku, aby mieć pewność, że sortowanie korespondencji seryjnej jest zasilane.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.