Niektóre systemy Linux stają się bardzo wolne, gdy Redis ładuje duży zestaw danych

14

Otrzymałem raport od użytkownika Redis i nie jestem pewien, co odpowiedzieć, ponieważ nie jestem ekspertem w dziedzinie Linuksa i jego harmonogramu, jednak my (jako projekt Redis) musimy rozwiązać ten problem, szczególnie w przyszłości, podobnie jak w przypadku klastra Redis, będziemy mieć wiele instancji Redis działających jednocześnie w jednym pudełku. Proszę więc o pomoc tutaj.

Problem:

  • Jądro: „Linux redis1 2.6.32-305-ec2 # 9-Ubuntu SMP czw 15 kwi 08:05:38 UTC 2010 x86_64 GNU / Linux”
  • dużo wolnej pamięci RAM, żadne inne procesy nie wykonują znaczących operacji we / wy.
  • Ważne , działa na dużej instancji EC2, a nie na prawdziwym serwerze. Nigdy nie widziałem czegoś takiego w niez zwirtualizowanym środowisku. Instancja EC2 brzmiała: „Pamięć bardzo duża, bardzo duża instancja 17,1 GB, 6,5 ECU (2 rdzenie wirtualne z jednostkami obliczeniowymi po 3,25 EC2 każda), 420 GB pamięci instancji lokalnej, platforma 64-bitowa” .

Zasadniczo po ponownym uruchomieniu dużej instancji Redis system będzie działał tak wolno, że nie będzie już można pisać w powłoce. Gdy Redis ładuje instancję, zużywa 100% procesora (ładuje dane tak szybko, jak to możliwe) i odczytuje plik dump.rdb sekwencyjnie. We / wy nie jest szczególnie wysokie, ponieważ ładowanie jest związane z procesorem, a nie z we / wy.

Dlaczego, u licha, pudełko z dwoma procesorami i dużą ilością pamięci RAM, bez zamiany rzeczy na dysku, powinno zasadniczo przestać działać z tym obciążeniem?

Mam wrażenie, że ma to wiele wspólnego z faktem, że jest to instancja EC2, więc związana z używaną technologią wirtualizacji, ponieważ bez problemu ładuję zestawy danych Redis 24 GB w moim pudełku (nawet z innymi instancjami Redis działa z dużym obciążeniem).

Dzięki za podpowiedź!

Salvatore

Edycja : dodając opinie z Twittera:

from @ezmobius: @antirez pierwszą rzeczą do zrobienia jest wypróbowanie go z / mnt lub lokalnych efemerycznych napędów, aby sprawdzić, czy jego niestabilność EBS, 2. upewnienie się, że nie jest to „kara za pierwsze zapisanie” (google it), a jeśli tak, to najpierw musisz dodać 0 do dysku.

from @dvirsky: @antirez Korzystam z wielu instancji Redis na dokładnie takich węzłach ec2. Zauważyłem pewne spowolnienie bgsave, ale nie to zjawisko.

antirez
źródło

Odpowiedzi:

4

Dane wyjściowe z „góry” mogą dać pewne wskazówki. W lewym górnym rogu jest pole oznaczone „% skradziony”, które odzwierciedla ilość procesora sprzętowego przekierowanego do innych gości w tym samym fizycznym pudełku. Widziałem tego rodzaju spowolnienia, gdy hiperwizor decyduje się przydzielić więcej procesora innemu gościowi, szczególnie gdy wykonuję jakieś długotrwałe zadanie wymagające dużej mocy procesora.

Nie jestem pewien, czy to twój problem, czy nie, ale warto to sprawdzić.

Kevin Smith
źródło
Dziękuję Kevin, to jest bardzo interesujące i zupełnie tego nie wiedziałem.
antirez
2

Ten sam problem dotyczyłem instancji EC2. Prawdopodobnie nie jest to związane z Redis - występuje, gdy trwa wysokie IO (np. Gdy Redis ładuje plik zrzutu).

Spójrz na ten wątek na forach Amazon: https://forums.aws.amazon.com/thread.jspa?messageID=215406

Eksperymentowałem z różnymi jądrami / obrazami i teraz działa dobrze (na starym jądrze 2.6.21).

Marek
źródło
Dzięki mhdk, zgaduję również, że jest to związane z wirtualizacją + harmonogramem Linuksa. Nawet z powolnym dyskiem We / Wy nie widzę żadnego powodu, dla którego inne procesy miałyby blokować, gdyby nie korzystały z dysku i nie miały zamienionych stron. Wypróbowanie różnych konfiguracji jądra / harmonogramu jest prawdopodobnie warte spróbowania.
antirez
2

Powinieneś sprawdzić kradzież procesora ( xx.x%stpo prawej stronie linii procesora), która toppokazuje, kiedy doświadczasz 100% obciążenia i zamrożonej powłoki. Kradzież pokazuje, ile faktycznych cykli procesora zostało skradzionych z maszyny przez hiperwizora i przekazanych innej maszynie. Kradzież procesora jest istotna tylko w środowiskach zwirtualizowanych. Miałem dokładnie ten problem z mikro instancjami, co w zasadzie sprawiło, że moja instancja była bezużyteczna przez około 1 godzinę (dopóki moje zadanie się nie skończy), jeśli wykonuję zadania wymagające dużej mocy procesora.

Możesz znaleźć więcej na ten temat, czytając ten post na temat Ramgings Grega . Chociaż, jeśli wierzysz Gregowi, powinno się to dziać tylko w mikro instancjach.

Shinnok
źródło