Come visualizzare l'utilizzo della memoria riepilogativa di gruppi di comandi (anziché processi)


10

C'è un modo per raggruppare processi simili quando si usano strumenti come top / htop? A volte voglio solo sapere cosa sta mangiando la mia memoria e alcuni programmi (soprattutto i browser) utilizzano più processi, il che rende difficile leggere quanta RAM usano davvero.

Finora mi è venuta in mente solo una cosa del genere:

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

Risposte:


7

È possibile utilizzare ps -Cper visualizzare solo le informazioni di processo per un determinato nome di comando.

per esempio

ps -C opera

È quindi possibile utilizzare altre psopzioni per estrarre solo i dati che stai cercando. In particolare, ho --no-headersper sopprimere le intestazioni di colonna e -o pmemper mostrare la percentuale di memoria utilizzata dal processo.

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

Questo ti darà un sacco di percentuali di utilizzo della memoria, una per riga.

Esistono numerosi metodi per sommare i dati in questo modo, uno dei metodi che uso frequentemente è di convogliarlo in xargs per convertirlo in una riga con elementi delimitati da spazi, quindi in sed per convertire gli spazi in +simboli e quindi in bcper eseguire il calcolo. Il tuo metodo di connessione paste -sd+funziona anche meglio di | xargs | sed.

Mettendo tutto insieme, ottieni:

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

o

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

In altre parole, puoi usare al ps -Cposto di più greps se vuoi solo dati su un particolare programma in esecuzione.

NOTA: è possibile utilizzare più -Copzioni sulla stessa riga di comando se si desidera informazioni su più di un programma alla volta. per esempio

ps -C iceweasel -C chromium -C opera

Già, prima persona che ha effettivamente capito / letto la mia domanda!
Korda,

L'unico problema che vedo con questo approccio è che alcuni programmi hanno lo stesso comando e tuttavia non vorrei raggrupparli (per esempio java ... e dato che sono sviluppatore java di solito ho almeno alcuni programmi java in esecuzione). Immagino non ci sia una soluzione perfetta ...
Korda,

c'è sempre ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...ad esempio cercare un programma Java chiamato Foo.
Cas

0

Puoi creare uno script di shell

#!/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

Ciò fornirà l'applicazione di utilizzo mem più elevata.


Ho provato a farlo funzionare e non mi ha dato risultati interessanti. Ad esempio mostra solo un programma, e non è quello che occupa la maggior parte della memoria
korda

È? Beh, vuoi qualcosa come top ?? se sì, puoi modificare lo script con un ritardo di 2 o 1 secondo ed eseguire la stessa cosa in qualche istante o per. Per me mostra l'applicazione di utilizzo della memoria più alta al momento in cui eseguo questo script. che tipo di cose stai provando, esegui semplicemente: ps af -o pmem, cmd | sort -r Ti darà la più alta applicazione per l'utilizzo dei mem
RahulAN,

Non funziona per me. Immagino che il motivo sia che questo tipo include i principali spazi bianchi
korda,

Vuoi dire che non stai ottenendo il nome corretto del processo ??
RahulAN,

Sì, perché ps aggiunge spazi alle cose di rientro. Quando un processo ha un utilizzo di 2 cifre, i valori di utilizzo di una cifra verranno rientrati e inizieranno con lo spazio iniziale. Immagino che aggiungere qualcosa di simile sed -e 's/^[[:space:]]*//'dovrebbe risolverlo. Inoltre il tuo script aggiunge l'utilizzo della memoria dei processi con lo stesso comando?
Korda,

0

Dall'interno in alto puoi usare quanto segue:

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

Potresti anche provare:

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

Questo comando fornirà i primi 5 processi in base all'uso della memoria.

Spero che queste informazioni ti siano state utili!


0

Questo può essere semplificato con termsql .

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

Nota che al momento non viene caricato su PyPI e può essere installato solo a livello di sistema ( setup.pyè un po 'rotto), come sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.