Mam serwer z 12G pamięci. Fragment góry pokazano poniżej:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12979 frank 20 0 206m 21m 12m S 11 0.2 26667:24 krfb
13 root 15 -5 0 0 0 S 1 0.0 36:25.04 ksoftirqd/3
59 root 15 -5 0 0 0 S 0 0.0 4:53.00 ata/2
2155 root 20 0 662m 37m 8364 S 0 0.3 338:10.25 Xorg
4560 frank 20 0 8672 1300 852 R 0 0.0 0:00.03 top
12981 frank 20 0 987m 27m 15m S 0 0.2 45:10.82 amarok
24908 frank 20 0 16648 708 548 S 0 0.0 2:08.84 wrapper
1 root 20 0 8072 608 572 S 0 0.0 0:47.36 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
Do free -m
zawiera następujące informacje:
total used free shared buffers cached
Mem: 12038 11676 362 0 599 9745
-/+ buffers/cache: 1331 10706
Swap: 2204 257 1946
Jeśli dobrze rozumiem, system ma tylko 362 MB dostępnej pamięci. Moje pytanie brzmi: jak mogę dowiedzieć się, który proces pochłania większość pamięci?
Podobnie jak w tle, system działa 64bit OpenSuse 12
.
Odpowiedzi:
Najpierw powtórz tę mantrę przez chwilę: „niewykorzystana pamięć to zmarnowana pamięć”. Jądro Linux przechowuje ogromne ilości metadanych i żądanych plików, dopóki coś, co wydaje się ważniejsze, nie wypchnie tych danych. Dlatego możesz uruchomić:
a druga
find
instancja będzie działać z absurdalną prędkością.Linux pozostawia tylko trochę wolnej pamięci, aby bez większego wysiłku poradzić sobie ze skokami zużycia pamięci.
Po drugie, chcesz znaleźć procesy, które pochłaniają całą twoją pamięć; w
top
użyciuM
polecenia do sortowania według użycia pamięci. Możesz zignorowaćVIRT
kolumnę, która po prostu mówi, ile pamięci wirtualnej zostało przydzielone, a nie ile pamięci zajmuje proces.RES
informuje o tym, ile pamięci jest rezydentne lub aktualnie znajduje się w pamięci RAM (w przeciwieństwie do zamiany na dysk lub nigdy tak naprawdę nie przydzielone, pomimo prośby).Ale ponieważ
RES
będzie liczyć np/lib/libc.so.6
pamięć raz dla prawie każdego procesu, to nie jest dokładnie to niesamowite miarą ile pamięci proces jest używany. TeSHR
raporty kolumn, ile pamięci jest dzielona z innymi procesami, ale nie ma gwarancji, że inny proces jest faktycznie dzielenie - może to być udostępnianych, tylko nikt inny nie chce się dzielić.smem
Narzędzie jest przeznaczone dla użytkowników pomagają lepiej Gage właśnie ile pamięci powinien naprawdę być obwiniać każdego procesu. Wykonuje sprytną pracę, aby dowiedzieć się, co jest naprawdę wyjątkowe, co jest udostępniane, i proporcjonalnie dostosowuje pamięć dzieloną do procesów, które ją współużytkują.smem
może pomóc ci zrozumieć, gdzie twoja pamięć idzie lepiej niżtop
będzie, aletop
jest doskonałym pierwszym narzędziem.źródło
/proc/meminfo
i/proc/slabinfo
pliki szczegół co jądro używa przechowywanie - wslabtop
programie jest bardzo podobnytop
, ale pokazuje, które z podzielników płyt przeznaczyły ile, jakie są ich stosunki są podobne, itd.użyj szybkiej porady za pomocą polecenia top w systemie Linux / UNIX
a następnie naciśnij Shift+ m(tj. napisz kapitał
M
).Z
man top
Lub alternatywnie: naciśnij Shift+ f, następnie wybierz wyświetlacz do uporządkowania według zużycia pamięci, naciskając klawisz, na następnie naciśnij Enter. Zobaczysz aktywny proces uporządkowany według zużycia pamięci
źródło
M
(Shift
+m
)top -o mem -O cpu
top -o RES
inaczej „nierozpoznanej nazwy pola„ mem ””(Dodanie -n flagi numerycznej do polecenia sortowania.)
źródło
ps aux --sort '%mem'
jak wyjaśniono w mojej odpowiedziNajpierw powinieneś przeczytać wyjaśnienie na wyjściu
free
. Podsumowując: masz co najmniej 10,7 GB pamięci, z której mogą łatwo korzystać procesy.Następnie powinieneś zdefiniować, jakie jest „użycie pamięci” dla procesu (nie jest to łatwe ani jednoznaczne, zaufaj mi).
Wtedy moglibyśmy pomóc więcej :-)
źródło
Lista i sortowanie procesów według zużycia pamięci:
źródło
ps -e -orss=,args= | sort -nr | head
ps aux --sort '%mem'
z ps procps (domyślnie w Ubuntu 12.04) generuje dane wyjściowe takie jak:
Więc tutaj Firefox jest największym konsumentem z 16% mojej pamięci.
Możesz być zainteresowanym także tym:
źródło
możesz określić, według której kolumny chcesz posortować, wykonując następujące czynności:
źródło
Możesz zobaczyć użycie pamięci, wykonując ten kod w swoim terminalu:
źródło
Jak zsumować wykorzystaną pamięć według nazwy procesu:
Czasami nawet patrząc na największe pojedyncze procesy, wciąż jest wiele niewykorzystanej pamięci. Aby sprawdzić, czy istnieje wiele takich samych mniejszych procesów korzystających z pamięci, możesz użyć polecenia takiego jak poniżej, które używa awk do zsumowania całkowitej pamięci używanej przez procesy o tej samej nazwie:
np. wyjście
źródło
To bardzo drugi raz
Ciągłe aktualizowanie
Dodałem także kilka gadżetów, które możesz docenić (lub możesz zignorować)
-n 1
oglądaj i aktualizuj co sekundę-U $(whoami)
Aby pokazać tylko swoje procesy. $ (niektóre polecenia) ocenia teraz| head -n4
Aby wyświetlać tylko nagłówek i 3 procesy jednocześnie, często potrzebujesz tylko elementów zamówienia o wysokim zużyciu${1-4}
mówi mój pierwszy argument$1
Chcę ustawić domyślnie na 4, chyba że go podamJeśli używasz komputera Mac, może być konieczne najpierw zainstalowanie zegarka
Alternatywnie możesz użyć funkcji
źródło
-m
na-r
Masz to proste polecenie:
źródło