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
korda
źródło

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
cas
źródło
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.

RahulAN
źródło
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!

Paweł
źródło
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.

saaj
źródło