Jak powiedzieć, jaki proces powoduje, że kswapd jest w użyciu?

23

Widzę kswapd używający 100% procesora ... jak mogę stwierdzić, w jakim procesie kswapd jest tak często używany?

Deshawn
źródło
1
Uhm. kswapd to proces. Działa w imieniu jądra.
mailq
2
@mailq ... tak, ale czy to nie zamienia pamięci przestrzeni użytkownika? a jeśli tak, to jak mam powiedzieć, która pamięć procesu zamienia w tym momencie?
Deshawn

Odpowiedzi:

18

kswapd zarządza przestrzenią wymiany w odpowiedzi na zapotrzebowanie pamięci większe niż fizycznie dostępne dla wszystkich procesów.

Jest niezależny od procesu, interesuje go tylko to, do których stron mają dostęp i kiedy (jest to bardziej skomplikowane niż to oczywiście, ale dla uproszczenia możemy równie dobrze spojrzeć w ten sposób).

Tak więc prawdziwe pytanie brzmi: „jakie procesy mają największe obciążenie pamięci, które powodują, że kswapd musi ciągle przeglądać strony”.

Najłatwiej jest na nie odpowiedzieć przy użyciu „góry” i przejścia do trybu sortowania wykorzystania pamięci.

Paweł
źródło
Dzięki!. Czy skswapd uruchamia się TYLKO wtedy, gdy rzeczywiste dotknięte strony przekraczają fizyczność, czy też uruchamia się, mimo że proces przydzielił pamięć lub odwzorował region SHM, ale go nie wykorzystał? To znaczy, czy dzieje się tak tylko wtedy, gdy pojawia się problem, czy też prowadzi księgowość i zamienia rzeczy między sobą, mimo że dostępna jest pamięć fizyczna, ale tylko dlatego, że jakiś proces był bezczynny itp.?
Deshawn
Jak rozumiem, kswapd w normalnych okolicznościach usunie wszystkie strony z pamięci głównej, które nie muszą tam być, ponieważ każda zwolniona strona to taka, której można użyć do buforowania lub innych procesów. Tzn. Lepiej jest mieć starą nieużywaną stronę już na dysku, niż ponieść powolny koszt przeniesienia jej w odpowiedzi na żądanie pamięci z innego procesu.
Paul
Nawet jeśli maszyna potrzebuje dużo miejsca na wymianę, nie powinna zajmować 100% procesora. Coś jest dziwnego.
Zaz
@Zaz To nie tyle, że używa mocy obliczeniowej procesora do zamiany, to fakt, że procesor jest w 100% wykorzystywany z powodu IOWAIT. Za każdym razem, gdy pamięć musi zostać zamieniona z dysku, procesor musi tam siedzieć i czekać na nią - IOWAIT, i nie robi nic innego (średnio).
Paul
@Paul: Jesteś pewien? topmówi mi, że nie spędza się czasu na czekaniu we / wy, a prawie 100% czasu spędza w systemie. Więcej informacji: kswapd często używa 100% procesora, gdy używana jest zamiana
Zaz
9

Możesz napisać skrypt .. ale możesz to również zrobić przez górę

Uruchom na górze, a następnie naciśnij O, a następnie p, a następnie Enter

Teraz wszystkie procesy są sortowane według użycia wymiany i możesz zobaczyć, które z nich korzystają

Mikrofon
źródło
2
O wyświetla opcje filtrowania dla mnie, naciśnięcie p, a następnie enter daje mi „” uwzględnij ”brak filtru separatora”
Shadow
@Shadow Ten sam problem, tutaj alternatywne polecenie unix.stackexchange.com/questions/128953/…
Björn
8

Jeśli korzystasz z systemu Ubuntu 15.10 lub nowszego, może to być rzeczywiście błąd , szczególnie jeśli twój system jest maszyną wirtualną bez partycji wymiany (np. AWS EC2). Problem istnieje w innych dystrybucjach , ale w chwili pisania nie jest jasne, czy ta sama poprawka działa uniwersalnie.

Tymczasowe obejście:

sudo ln -s /dev/null /etc/udev/rules.d/40-vm-hotadd.rules
sudo reboot

Pamiętaj, że spowoduje to wyłączenie hotaddingu pamięci RAM / procesorów dla maszyn wirtualnych Xen i Hyper-V.

Zenexer
źródło
Gdyby to pojawiło się znikąd w moim systemie na Kubuntu 16.10 z włączonym obejściem już jakiś czas temu.
jeteon,
@jeteon Istnieje wiele problemów, które mogą powodować takie zachowanie; to zdarza się szczególnie często.
Zenexer,
Tak. Odkryłem, że to echo 3 > /proc/sys/vm/drop_cachesłagodzi, gdy zacznie się dziać. Mam uprzednio polecenie na cronie i wydaje się, że to pomaga, a przynajmniej ogranicza czas trwania masakry OOM, kiedy jestem z dala od komputera.
jeteon,
6

Wydaje się kswapd, że gdzieś jest też błąd , mam nadzieję, że tylko w starszych jądrach.

Niemal każdego dnia kswapd losuje się na niektórych komputerach w większym klastrze (jednak z nieprądowym jądrem). 100% procesora dla obu procesów kswapd. Żadnych innych uruchomionych procesów (z wyjątkiem powłoki ssh), dużo wolnej pamięci RAM (ponad 700 MB) i w ogóle nie używany SWAP. Bez zamiany, bez zamiany.

Nic jeszcze nie wyjaśnia, dlaczego konkretna maszyna została trafiona, a inna nie. Wydaje się, że nie jest całkowicie losowy, ponieważ zwykle uderza w więcej niż jedną maszynę w krótkim czasie. Wygląda na to, że maszyny bezczynne, a także maszyny pod wysokim ciśnieniem są mniej (!) Prawdopodobnie dotknięte efektem. Musi więc coś zrobić z obciążeniem roboczym i uderza tylko wtedy, gdy maszyna nie jest bezczynna ani bardzo zajęta.

Jeśli problem się pojawi, nic już nie pomaga. Zabicie wszystkich procesów (które nie stały się nie do zabicia), odmontowanie wszystkich systemów plików, nic. kswapdwciąż pozostaje na 100% CPU. Podejrzewam, że w jądrach SMP występuje pewien wyścig spinlocków, ale jest też prawdopodobne, że się mylę.

Być może zobacz moją odpowiedź serverfault.com/questions/316995/#493257

Uwagi:

  • Ponowne uruchamianie komputerów, których dotyczy problem, często kończy się niepowodzeniem, ponieważ proces zamykania zaczyna się gdzieś zawiesić.
  • Nie ma bezpośredniego połączenia z Internetem. Przyczyny zagraniczne są mało prawdopodobne.
  • Wydaje się, że zależy to od rodzaju obciążenia przetwarzanego przez maszyny z perspektywy obciążenia, ponieważ mamy maszyny, na które (jeszcze) nie miało to wpływu.
  • Niestety nie mogę sprecyzować, co robimy i dlaczego.
  • Tak, spekuluję. Ponieważ dzisiaj jest to niezwykle zagadkowy efekt.
Tino
źródło
To jest historyczne. RedHat potwierdził: To był problem jądra 2.6.18-194.el5 w połączeniu z klientem NFS. Zostało to naprawione już w 2012 roku. Zobacz połączoną odpowiedź w moim tekście, aby uzyskać więcej informacji. Jeśli trafisz dziś, prawdopodobnie jest to inna przyczyna.
Tino
1
W niektórych miejscach jest to nadal problem. Widziałem mnóstwo takich pop-upów. tutaj i oto kilka przykładów.
trueCamelType