Re: monitorare utilizzo di RAM
Piviul ha scritto il 02/05/2016 alle 08:46: > [...] > cmd="ps aux -p $pid | tail -n1 | sed 's/^" ^^^ è un refuso: ps u -p... ovviamente Piviul
Re: monitorare utilizzo di RAM
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
Re: monitorare utilizzo di RAM
Il 28/04/2016 12:43, Piviul ha scritto: 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
Re: monitorare utilizzo di RAM
On 29/04/2016 23:33, gerlos wrote: Volendo usare roba più "elementare" [...] (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 $ 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
Re: monitorare utilizzo di RAM
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
Re: monitorare utilizzo di RAM
On 29/04/2016 10:04, Piviul wrote: 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 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 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
Re: monitorare utilizzo di RAM
Davide Prina ha scritto il 28/04/2016 alle 20:22: > 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
Re: monitorare utilizzo di RAM
On 28/04/2016 08:39, Piviul wrote: 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
Re: monitorare utilizzo di RAM
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
Re: monitorare utilizzo di RAM
Se non erro il valore è espresso in KB, almeno così risulta dal man Gianluca Inviato da Motorola Moto X Il 28 apr 2016 11:42, "Piviul"ha scritto: > Gianluca Mangiarotti ha scritto il 28/04/2016 alle 11:02: > > 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 > > >
Re: monitorare utilizzo di RAM
Gianluca Mangiarotti ha scritto il 28/04/2016 alle 11:02: > 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
Re: monitorare utilizzo di RAM
Il comando top -p "pid-del-processo" può aiutarti Grazie per l'attenzione Buona giornata Gianluca Mangiarotti mail: giemm...@gmail.com Inviato da Motorola Moto X Il 28 apr 2016 08:39, "Piviul"ha scritto: > Ciao a tutti, dovrei monitorare l'utilizzo di RAM di un processo. Avete > qualche consiglio? > > Piviul > >