Uzyskanie użycia pamięci przez ps jest dość niewiarygodne. Jeśli masz nowsze jądro, powinno ono obsługiwać / proc / pid # / smaps, które dostarczają szczegółowych informacji na temat wykorzystania pamięci w każdym procesie. Poniżej znajduje się dość brudny i szybki skrypt do przechodzenia przez każdy otwarty proces i chwytania użycia Size, Rss, Pss oraz Shared Clean / Dirty. Mam nadzieję, że może być użyteczny w jakiś sposób.
#!/bin/bash
for pid in $(ps -ef | awk '{print $2}'); do
if [ -f /proc/$pid/smaps ]; then
echo "* Mem usage for PID $pid"
echo "-- Size:"
cat /proc/$pid/smaps | grep -m 1 -e ^Size: | awk '{print $2}'
echo "-- Rss:"
cat /proc/$pid/smaps | grep -m 1 -e ^Rss: | awk '{print $2}'
echo "-- Pss:"
cat /proc/$pid/smaps | grep -m 1 -e ^Pss: | awk '{print $2}'
echo "Shared Clean"
cat /proc/$pid/smaps | grep -m 1 -e '^Shared_Clean:' | awk '{print $2}'
echo "Shared Dirty"
cat /proc/$pid/smaps | grep -m 1 -e '^Shared Dirty:' | awk '{print $2}'
fi
done
ps ef -o command,vsize,rss,%mem,size
Nie mogłem znaleźć opcji dla pamięci współużytkowanej, ale znalazłem opcje dla% całkowitej pamięci fizycznej i ilości obszaru wymiany, który byłby potrzebny do zamiany tego procesu. To i wiele więcej jest udokumentowane na stronie podręcznika dla ps.
źródło
top
,ps
i na podobne programy ma to wpływ w ten sam sposób.Odpowiedź @ user26528 nie całkiem poprawnie oblicza pamięć - potrzebujesz sumy odwzorowań w mapach, nie tylko górnej. Ten skrypt powinien to zrobić:
źródło
Lista procesów według zużycia pamięci
źródło
ps -e -orss=,pid=,args= | sort -b -k1,1n
aby dołączyć identyfikator procesups
może sortować samodzielnie:ps -eo rss=,args= --sort +rss
możesz użyć
źródło
Wyświetl listę procesów według użycia pamięci
polecenie: ps -e -orss =, args = | sort -b -k1,1n | pr -TW $ KOLUMNY \
źródło
Aktualizacja:
Następujący linijka zawiera również informacje o całkowitym zużyciu pamięci przez bieżącego użytkownika.
Właśnie wymieniłem wszystkie procesy użytkownika posortowane według najwyższego zużycia pamięci w MB, takie jak:
Możesz użyć
command=
zamiast,comm=
aby wyświetlić pełny proces ścieżki.Po
=
prostu usuwa tytuł kolumny.źródło
Odkryłem, że wiele razy ten sam proces ma podproces rozwidlenia i jesteś zainteresowany całkowitą pamięcią używaną przez ten proces. np. Google Chrome uruchamia wiele procesów i chcesz poznać całkowitą pamięć zajętą przez Chrome. Uważam, że polecenie poniżej jednej linii jest bardzo przydatne
Zajmuje się wieloma rzeczami, takimi jak wyświetlanie pamięci w MB, sortowanie pamięci i głównie grupowanie według poleceń. Grupuje również% CPU i% pamięci. Pokazuje dane w formacie przyjaznym dla użytkownika.
To polecenie zostało zainspirowane tą odpowiedzią i bardzo pomogło mi dowiedzieć się, który proces pochłania moje zasoby.
źródło