Jak wyświetlić podsumowanie wykorzystania pamięci przez grupy poleceń (zamiast procesów)


10

Czy istnieje sposób na grupowanie podobnych procesów przy użyciu narzędzi takich jak top / htop? Czasami chcę tylko wiedzieć, co zjada moją pamięć, a niektóre programy (głównie przeglądarki) używają wielu procesów, co utrudnia odczytanie, ile pamięci RAM naprawdę używają.

Do tej pory wymyśliłem tylko coś takiego:

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc

Odpowiedzi:


7

Możesz użyć ps -Cdo wyświetlenia informacji o procesie tylko dla konkretnej nazwy polecenia.

na przykład

ps -C opera

Następnie możesz użyć innych psopcji, aby wyodrębnić tylko te dane, których szukasz. W szczególności hlub w --no-headerscelu pominięcia nagłówków kolumn i -o pmempokazania procentu pamięci używanej przez proces.

ps -C opera --no-headers -o pmem

To da ci garść procentów wykorzystania pamięci, po jednym w wierszu.

Istnieje wiele metod sumowania takich danych, jedną z metod, których często używam, jest potokowanie do xargs w celu przekształcenia go w jedną linię z elementami oddzielonymi spacjami, a następnie w sed, aby przekształcić spacje w +symbole, a następnie bcdo wykonania obliczenie. Twoja metoda instalacji w rurze paste -sd+działa równie dobrze lub prawdopodobnie lepiej niż | xargs | sed.

Podsumowując, otrzymujesz:

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

lub

ps -C opera --no-headers -o pmem | paste -sd+ | bc

Innymi słowy, możesz użyć ps -Czamiast wielu greps, jeśli chcesz tylko dane o jednym konkretnym uruchomionym programie.

UWAGA: Możesz użyć wielu -Copcji w tym samym wierszu poleceń, jeśli chcesz uzyskać informacje o więcej niż jednym programie na raz. na przykład

ps -C iceweasel -C chromium -C opera

Tak, pierwsza osoba, która naprawdę zrozumiała / przeczytała moje pytanie!
— korda

Jedynym problemem, jaki widzę w tym podejściu, jest to, że niektóre programy mają tę samą komendę, a mimo to nie chciałbym ich grupować (na przykład java ... a ponieważ jestem programistą Java, zazwyczaj mam uruchomionych co najmniej kilka programów Java). Myślę, że nie ma idealnego rozwiązania ...
— korda

zawsze jest ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...np. poszukiwanie programu Java o nazwie foo.
— cas

0

Możesz zrobić skrypt powłoki

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

Zapewni to najwyższe wykorzystanie aplikacji Mem.


Starałem się, aby to działało i nie dało mi to interesujących rezultatów. Na przykład pokazuje tylko jeden program i to nie jest ten, który zajmuje najwięcej pamięci
— korda

Czy to jest Chcesz coś takiego jak top? jeśli tak, możesz zmodyfikować skrypt z opóźnieniem 2 lub 1 sekundy i uruchomić to samo przez jakiś czas lub przez. Dla mnie pokazuje najwyższe użycie pamięci w momencie uruchomienia tego skryptu. jakiego rodzaju rzeczy próbujesz, po prostu uruchom: ps af -o pmem, cmd | sort -r Daje ci aplikację o najwyższym zużyciu pamięci
— RahulAN

To nie działa dla mnie. Myślę, że powodem jest to, że sortowanie obejmuje wiodącą białą przestrzeń
— korda

Masz na myśli, że nie otrzymujesz prawidłowej nazwy procesu?
— RahulAN

Tak, ponieważ ps dodaje spacje do wcięć. Gdy jeden proces ma 2-cyfrowe użycie, jedna cyfra będzie wcięta i rozpocznie się od wiodącej spacji. Myślę, że dodanie czegoś takiego sed -e 's/^[[:space:]]*//'powinno to naprawić. Czy twój skrypt sumuje użycie pamięci przez procesy korzystające z tego samego polecenia?
— korda

0

Od wewnątrz możesz użyć następujących opcji:

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

Możesz także spróbować:

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

To polecenie da 5 najlepszych procesów według zużycia pamięci.

Mam nadzieję, że te informacje okażą się pomocne!


0

Można to uprościć za pomocą termsql .

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

Pamiętaj, że obecnie nie jest przesyłany do PyPI , a także może być zainstalowany tylko w setup.pycałym systemie ( jest trochę zepsuty), jak sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.