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 -al
zawieszają 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!
Odpowiedzi:
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ę.
źródło
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 ...
źródło
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.
źródło
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.
źródło
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 -df
aby wyświetlić statystyki dysku, lubdstat -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.
źródło