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.