Discussione:
monitorare utilizzo di RAM
Piviul
2016-04-28 06:39:01 UTC
Permalink
Ciao a tutti, dovrei monitorare l'utilizzo di RAM di un processo. Avete
qualche consiglio?

Piviul
Gianluca Mangiarotti
2016-04-28 09:02:08 UTC
Permalink
Il comando top -p "pid-del-processo" può aiutarti

Grazie per l'attenzione
Buona giornata

----------------------------------------------------
Gianluca Mangiarotti
mail: ***@gmail.com
----------------------------------------------------
Inviato da Motorola Moto X
Post by Piviul
Ciao a tutti, dovrei monitorare l'utilizzo di RAM di un processo. Avete
qualche consiglio?
Piviul
Piviul
2016-04-28 09:41:30 UTC
Permalink
Il comando top -p "pid-del-processo" può aiutarti
in effetti ero arrivato alla stessa conclusione...

per vedere l'utilizzo di RAM devo guardare la colonna RES?

nella colonna RES ho visto anche che alcune volte c'è un numero e
immagino siano KiB, talvolta c'è un numero seguito da una m e immagino
siano i MiB e nel caso in cui il risultato venga mostrato in GiB che
lettera c'è, la g?

Mille grazie

Piviul
Gianluca Mangiarotti
2016-04-28 09:53:59 UTC
Permalink
Se non erro il valore Ú espresso in KB, almeno così risulta dal man


Gianluca

----------------------------------------------------
Inviato da Motorola Moto X
Post by Piviul
Post by Gianluca Mangiarotti
Il comando top -p "pid-del-processo" può aiutarti
in effetti ero arrivato alla stessa conclusione...
per vedere l'utilizzo di RAM devo guardare la colonna RES?
nella colonna RES ho visto anche che alcune volte c'Ú un numero e
immagino siano KiB, talvolta c'Ú un numero seguito da una m e immagino
siano i MiB e nel caso in cui il risultato venga mostrato in GiB che
lettera c'Ú, la g?
Mille grazie
Piviul
Piviul
2016-04-28 10:43:56 UTC
Permalink
Gianluca Mangiarotti ha scritto il 28/04/2016 alle 11:53:
vi > Se non erro il valore è espresso in KB, almeno così risulta dal man
purtroppo no come dicevo... top aggiunge una m mentre htop aggiunge M
per esprimere il consumo in MiB. Ora ero interessato a sapere come
esprime il consumo in GiB.

Se a qualcuno interessa questo è lo script:

#!/bin/bash
pname=dar
logger=$(which logger)
[ -z $logger ] && echo "E: logger no found" && exit 1
logger="$logger -t $(basename $0 .sh): "
while [ 1 = 1 ]; do
pid=$(pidof $pname)
maxram=0
if [ -n "$pid" ]; then
$logger "Inizio monitoraggio utilizzo RAM per il processo $pname
($pid)"
while [ "$(pidof $pname)" = "$pid" ]; do
curram=$(top -p $pid -b -n1 |\
tail -n1 |\
sed
's/^[[:space:]]*'$pid'[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*\([^[:space:]]*\).*$/\1/')
[ -n "$(echo $curram | grep [0-9]*m$)" ] && curram=$(echo
$curram | grep -o "[0-9]*") && curram=$(($curram*1024))
[ -n "$(echo $curram | grep [0-9]*g$)" ] && curram=$(echo
$curram | grep -o "[0-9]*") && curram=$(($curram*1024*1024))
if [ -z "$(echo $curram | grep ^[0-9]*$)" ]; then
$logger "E: errore nella ricerca della ram utilizzata:
$curram non contiene un valore interpretabile come consumo di ram"
else
[ $curram -gt $maxram ] && maxram=$curram
fi
sleep 1
done
$logger "il processo $pname ($pid) ha consumato al massimo
"$maxram"K di RAM"
fi
sleep 10
done

Lo script non fa altro che loggare in sysylog il consumo di RAM del
processo chiamato $pname (nello script ad esempio si monitorizza il
consumo di dar).

Un saluto

Piviul
Marco Romano
2016-04-30 19:36:26 UTC
Permalink
Post by Piviul
sed
's/^[[:space:]]*'$pid'[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*\([^[:space:]]*\).*$/\1/')
Se ti serve il valore nella sesta colonna più che sed forse è più adatto
awk:

awk '{print $6}'

la riga di dichiarazione della variabile curram diverrebbe quindi:

curram=$(top -p $pid -b -n1 |\
awk -v pid=$pid '$1 == pid {print $6}')

grazie alla verifica $1 ~ pid ci siamo tolti di mezzo anche tail ;)
--
Kind regards,

Marco Romano
Davide Prina
2016-04-28 18:22:10 UTC
Permalink
Post by Piviul
dovrei monitorare l'utilizzo di RAM di un processo.
se vuoi sapere l'uso della RAM ti consiglio di usare ps

Puoi così sapere quanta RAM, RAM per dati, RAM per eseguibile, quanto
swap sta usando un processo

es:
$ ps -v | head

$ man ps
[...]
%mem %MEM ratio of the process's resident set size to the
physical memory on the machine, expressed as a percentage. (alias pmem).
[...]
drs DRS data resident set size, the amount of physical
memory devoted to other than executable code
[...]
rss RSS resident set size, the non-swapped physical memory
that a task has used (in kiloBytes). (alias rssize, rsz).
[...]
trs TRS text resident set size, the amount of physical
memory devoted to executable code.
[...]
vsz VSZ virtual memory size of the process in KiB
(1024-byte units). Device mappings are currently excluded; this is
subject to change. (alias vsize).

Ciao
Davide
--
Dizionari: http://linguistico.sourceforge.net/wiki
Client di posta: http://www.mozilla.org/products/thunderbird
GNU/Linux User: 302090: http://counter.li.org
Non autorizzo la memorizzazione del mio indirizzo su outlook
Piviul
2016-04-29 08:04:50 UTC
Permalink
Post by Davide Prina
se vuoi sapere l'uso della RAM ti consiglio di usare ps
Puoi così sapere quanta RAM, RAM per dati, RAM per eseguibile, quanto
swap sta usando un processo
io vorrei sapere quanta RAM viene allocata per un processo in totale,
indipendentemente dal fatto che l'allocazione avvenga per i dati, per
l'eseguibile, in swap o meno... quale valore devo prendere? Lo chiedo
perché il campo che restituisce ps che più si avvicina a RES di top (che
credo sia la quantità usata dal processo) è RSS... ma non è mai uguale!

grazie mille

Piviul
Davide Prina
2016-04-29 17:08:50 UTC
Permalink
Post by Piviul
io vorrei sapere quanta RAM viene allocata per un processo in totale,
indipendentemente dal fatto che l'allocazione avvenga per i dati, per
l'eseguibile, in swap o meno...
ma allora non vuoi sapere quanta RAM usa il processo, ma quanta memoria
totale (tra reale = RAM e virtuale = SWAP) viene utilizzata
Post by Piviul
quale valore devo prendere?
quello che vuoi quindi è la somma di DRS+RSS+TRS
questo valore, se non erro, è espresso in KByte

c'è anche VSZ che, se non erro, è espresso in Kbit

lo puoi ricavare con l'opzione -o, ad esempio:
$ ps -o %z
Post by Piviul
perché il campo che restituisce ps che più si avvicina a RES di top (che
credo sia la quantità usata dal processo) è RSS... ma non è mai uguale!
$ man top
[...]
18. RES -- Resident Memory Size (KiB)
The non-swapped physical memory a task is using
[...]

che, come giustamente dici, equivale a RSS, però RES è in Kbit, mentre
RSS è in KByte

Per saperne di più è sufficiente usare questi due comandi:
$ man top
$ man ps

Ciao
Davide
--
Dizionari: http://linguistico.sourceforge.net/wiki
Petizione contro il formato ms-ooxml:
http://www.noooxml.org/petition
Non autorizzo la memorizzazione del mio indirizzo su outlook
gerlos
2016-04-29 21:33:16 UTC
Permalink
Ciao,
Volendo usare roba più "elementare", per ottenere la quantità di memoria
usata da un processo (comunque la si definisca) si può usare anche (1234 Ú
il pid del processo):

$ cat /proc/1234/status | grep Vm
VmPeak: 43904 kB
VmSize: 42880 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 13716 kB
VmRSS: 13700 kB
VmData: 34344 kB
VmStk: 136 kB
VmExe: 384 kB
VmLib: 6740 kB
VmPTE: 32 kB
VmPMD: 0 kB
VmSwap: 0 kB

Poi se si vuole si può usare grep per filtrare solo il valore che interessa
(ad es. VmRSS se i dati devono "somigliare" a quellidi top).

Se poi si vogliono ulteriori dettagli, c'Ú /proc/1234/smaps, ma non Ú
altrettanto semplice da leggere! :-O

Saluti,
Gerlos
Davide Prina
2016-04-30 16:53:33 UTC
Permalink
Volendo usare roba più "elementare" [...] (1234 è
$ cat /proc/1234/status | grep Vm
VmPeak: 43904 kB
VmSize: 42880 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 13716 kB
VmRSS: 13700 kB
VmData: 34344 kB
VmStk: 136 kB
VmExe: 384 kB
VmLib: 6740 kB
VmPTE: 32 kB
VmPMD: 0 kB
VmSwap: 0 kB
$ man ps
[...]
NOTES
This ps works by reading the virtual files in /proc. This ps
does not need to be setuid kmem or have any privileges to run. Do not
give this ps any special permissions.

CPU usage is currently expressed as the percentage of time spent
running during the entire lifetime of a process. This is not ideal, and
it does not conform to the standards that ps otherwise
conforms to. CPU usage is unlikely to add up to exactly 100%.

The SIZE and RSS fields don't count some parts of a process
including the page tables, kernel stack, struct thread_info, and struct
task_struct. This is usually at least 20 KiB of memory that is
always resident. SIZE is the virtual size of the process
(code+data+stack).
[...]

interessante, questa cosa del non tener conto di page tables, ... non la
sapevo.

Secondo me è meglio usare ps...

Ciao
Davide
--
Dizionari: http://linguistico.sourceforge.net/wiki
Strumenti per l'ufficio: https://www.libreoffice.org
GNU/Linux User: 302090: http://counter.li.org
Non autorizzo la memorizzazione del mio indirizzo su outlook
Piviul
2016-05-02 06:46:04 UTC
Permalink
Mille grazie a tutti quanti; se qualcuno fosse interessato posto lo script:

#!/bin/bash

pname=dar
logger=$(which logger)
[ -z $logger ] && echo "E: logger not found" && exit 1
logger="$logger -t $(basename $0 .sh)"
while [ 1 = 1 ]; do
pid=$(pidof $pname | cut -f1 -d\ )
maxram=0
if [ -n "$pid" ]; then
$logger "I find a process with name $pname (pid $pid): I begin
to monitor the max RAM used by the process"
while [ "$(pidof $pname)" = "$pid" ]; do
str="[[:space:]]*[^[:space:]]*"

cmd="ps aux -p $pid | tail -n1 | sed 's/^"
for i in {1..4}; do cmd=$cmd$str; done # I skip first 4
(USER,PID,%CPU,%MEM,VSZ)
cmd="$cmd[[:space:]]*\([^[:space:]]*\).*$/\1/'"
curram=$(eval $cmd)
# echo "$(date --rfc-3339=seconds) ($pid): $curram"

if [ -z "$(echo $curram | grep ^[0-9]*$)" ]; then
$logger "E: error finding the RAM amount used by $pname:
$curram doesn't seems to be numeric"
elif [ $curram -gt $maxram ]; then
maxram=$curram
fi
sleep 1
done
$logger "the process $pname ($pid) has used $maxram Kib"
fi
sleep 10
done
Piviul
2016-05-02 08:28:36 UTC
Permalink
Post by Piviul
[...]
cmd="ps aux -p $pid | tail -n1 | sed 's/^"
^^^

è un refuso: ps u -p... ovviamente

Piviul

Continua a leggere su narkive:
Loading...