Przed pytaniem, żeby było jasne: tak, wiem o pamięci podręcznej dysku, i nie, to nie moja sprawa :) Przepraszam za tę preambułę :)
Używam CentOS 5. Każda aplikacja w systemie ciężko się wymienia, a system jest bardzo wolny. Kiedy robię free -m
oto co mam:
total used free shared buffers cached
Mem: 3952 3929 22 0 1 18
-/+ buffers/cache: 3909 42
Swap: 16383 46 16337
Tak więc mam tylko 42 Mb do wykorzystania! Z tego co rozumiem -/+ buffers/cache
właściwie nie liczy pamięci podręcznej dysku, więc rzeczywiście mam tylko 42 Mb, prawda? Pomyślałem, że mogę się mylić, więc próbowałem wyłączyć buforowanie dysku i nie miało to żadnego skutku - obraz pozostał taki sam.
Postanowiłem więc dowiedzieć się, kto używa całej mojej pamięci RAM i użyłem top
za to. Ale najwyraźniej informuje, że żaden proces nie używa mojej pamięci RAM. Jedynym procesem na moim szczycie jest MySQL, ale używa on 0,1% pamięci RAM i 400 MB wymiany. To samo zdjęcie, gdy próbuję uruchomić inne usługi lub aplikacje - wszystko w zamian, top
pokazuje, że MEM nie jest używany (maksymalnie 0,1% dla każdego procesu).
top - 15:09:00 up 2:09, 2 users, load average: 0.02, 0.16, 0.11
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4046868k total, 4001368k used, 45500k free, 748k buffers
Swap: 16777208k total, 68840k used, 16708368k free, 16632k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
3214 ntp 15 0 23412 5044 3916 S 0.0 0.1 0:00.00 17m ntpd
2319 root 5 -10 12648 4460 3184 S 0.0 0.1 0:00.00 8188 iscsid
2168 root RT 0 22120 3692 2848 S 0.0 0.1 0:00.00 17m multipathd
5113 mysql 18 0 474m 2356 856 S 0.0 0.1 0:00.11 472m mysqld
4106 root 34 19 251m 1944 1360 S 0.0 0.0 0:00.11 249m yum-updatesd
4109 root 15 0 90152 1904 1772 S 0.0 0.0 0:00.18 86m sshd
5175 root 15 0 90156 1896 1772 S 0.0 0.0 0:00.02 86m sshd
Restart nie pomaga, a tak jest bardzo wolno, czego normalnie nie oczekiwałbym na tej maszynie (4 rdzenie, 4 GB pamięci RAM, RAID1).
Tak więc - jestem pewien, że nie jest to pamięć podręczna dysku, która korzysta z pamięci RAM, ponieważ normalnie powinna ona zostać zmniejszona i pozwolić innym procesom korzystać z pamięci RAM, a następnie przejść do wymiany.
Wreszcie pytanie brzmi: jeśli ktoś ma jakieś pomysły, jak dowiedzieć się, który proces tak naprawdę wykorzystuje pamięć?
źródło
irc.freenode.org
. Stworzyłem czat dla szerszej dyskusji tutaj .Odpowiedzi:
W Linuksie w
top
proces, który możesz nacisnąć<
klawisz, aby przesunąć sortowanie wyświetlacza wyjściowego w lewo. Domyślnie jest sortowany według%CPU
więc jeśli naciśniesz klawisz 4 razy, sortujesz go wedługVIRT
który jest wielkością pamięci wirtualnej, dając odpowiedź.Innym sposobem na to jest:
powinien dać ci wyjście posortowane według wirtualnych rozmiarów procesów.
Oto długa wersja:
źródło
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
na serwerze Ubuntu 11.10.-o
opcje. RHEL4 to działa. RHEL5:ps -e -o pid,vsz,comm= | sort -n -k 2
Prace. Spróbuję 11.10 później dzisiaj, ale jeśli znajdziesz odpowiednie opcje sortowania, daj mi znać.ps -e -o pid,vsz,comm | sort -n -k 2
może działać, ale nie mam w tej chwili miejsca na weryfikację.-ef
opcja. Ale wydaje się, że daje to rozsądne wyjście:sudo ps axo pid,vsz,comm=|sort -n -k 2
ps -e
lubps -a
<
Nie wiedziałem, że to możliwe, fedoraPokaż pamięć procesów w megabajtach i ścieżkę procesu.
źródło
Tylko uwaga na serwerze pokazująca te same symptomy, ale wciąż wykazująca wyczerpanie pamięci. To, co skończyło się znalezieniem, to sysctl.conf z pudełka z 32 GB pamięci RAM i konfiguracją dla DB z ogromnymi stronami skonfigurowanymi do 12000. Ta skrzynka ma tylko 2 GB pamięci RAM, więc przypisuje całą wolną pamięć RAM do dużych stron (tylko 960 z nich). Ustawienie ogromnych stron na 10, ponieważ i tak nie były używane, uwolniło całą pamięć.
Szybkie sprawdzenie / proc / meminfo w celu wyszukania ustawień HugePages_ może być dobrym początkiem rozwiązywania problemów z co najmniej jednym nieoczekiwanym hogiem pamięci.
źródło
Możesz także użyć polecenia ps, aby uzyskać więcej informacji o procesie.
źródło
Odwołuję się to i Całkowita pamięć używana przez proces Pythona? - Przepełnienie stosu to jest moja odpowiedź. Mam teraz konkretne narzędzie do liczenia procesów (python).
Dołącz moją listę procesów.
Odniesienie
źródło
W moim przypadku problem polegał na tym, że serwer był wirtualnym serwerem VMware
vmw_balloon
moduł włączony:Bieganie:
Tak więc gospodarz odzyskał około 5 GB pamięci. Tak więc pomimo oficjalnej „8 GB do mojej maszyny wirtualnej” w praktyce było to znacznie mniej:
źródło
Stwórz skrypt
show-memory-usage.sh
z treścią:źródło