[CLI] Quanta ram usa un processo

Installazione, configurazione e uso di programmi e strumenti.
Scrivi risposta
rinosan_76
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1374
Iscrizione: sabato 18 marzo 2006, 13:41

[CLI] Quanta ram usa un processo

Messaggio da rinosan_76 »

Salve a tutti... sto cercando di creare uno script che controlli quanta ram usa un programma (fatto in casa da un programmatore) che secondo me si blocca quando raggiunge una certa quantità di ram, ma non riesco mai a scovarlo sul fatto.
Esiste un comando da terminale per sapere il singolo processo quanto sta "succhiando"?
Qualcosa che mi ritorna solo il numero dei MB nudo e crudo
Grazie
Rino
La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.      [Francisco Goya]
http://www.mangioebevo.it
Avatar utente
woddy68
Rampante Reduce
Rampante Reduce
Messaggi: 8642
Iscrizione: sabato 12 febbraio 2011, 14:23
Desktop: Kde Plasma5
Distribuzione: openSUSE Tumbleweed - KDE Neon
Sesso: Maschile

Re: [CLI] Quanta ram usa un processo

Messaggio da woddy68 »

Un qualsiasi monitor di sistema può dirtelo.
Ad esempio il lettore multimediale Elisa nel mio monitor di sistema segnala che usa 173.964.
Come puoi vedere qui sotto...
Immagine
Da terminale puoi usare top.
Desktop - DELL Optiplex 7010 - Notebook HP 250
-Ho sempre accettato caramelle dagli sconosciuti-
🇺🇦 🇺🇦 🇺🇦
rinosan_76
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1374
Iscrizione: sabato 18 marzo 2006, 13:41

Re: [CLI] Quanta ram usa un processo

Messaggio da rinosan_76 »

Scusa ma così non ottengo ciò che mi serve. Io ho bisogno di un qualcosa (se esiste ovviamente) che da terminale (Command line utilizzabile con bash) mi ritorni solo il numero di MB usati solo dal processo interessato.
Magari lo fa top, ma io non saprei farlo. Immagina di fare uno script che se il processo firefox supera 1000MB mi manda una mail.
Quel 1000 come lo ricavo?
Grazie :)
Rino
La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.      [Francisco Goya]
http://www.mangioebevo.it
Avatar utente
woddy68
Rampante Reduce
Rampante Reduce
Messaggi: 8642
Iscrizione: sabato 12 febbraio 2011, 14:23
Desktop: Kde Plasma5
Distribuzione: openSUSE Tumbleweed - KDE Neon
Sesso: Maschile

Re: [CLI] Quanta ram usa un processo

Messaggio da woddy68 »

Le mie competenze in fatto di script sono minime, per cui passo...immagino che un modo ci sia.
Desktop - DELL Optiplex 7010 - Notebook HP 250
-Ho sempre accettato caramelle dagli sconosciuti-
🇺🇦 🇺🇦 🇺🇦
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2854
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [CLI] Quanta ram usa un processo

Messaggio da DoctorStrange »

Secondo me lo puoi fare con il solito vecchio conky. Avresti una scritta perennemente sul monitor che ti indica quante risorse impiega quello specifico processo e, se vuoi, puoi impostare un allarme in modo che ti arrivi l'email, ogni volta che il limite venga superato.

Se non conosci conky, guarda su internet che troverai tute le informazioni che cerchi.

Saluti
rinosan_76
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1374
Iscrizione: sabato 18 marzo 2006, 13:41

Re: [CLI] Quanta ram usa un processo

Messaggio da rinosan_76 »

No no conosco conky... ma necessitavo di qualcosa da mettere in uno script.
La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.      [Francisco Goya]
http://www.mangioebevo.it
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2842
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [CLI] Quanta ram usa un processo

Messaggio da rai »

Hai già provato a usare pmap?. Non so quanto sia preciso (cioè se riporta la memoria fisica preallocata o quella effettivamente usata dai processi)
pmap - report memory map of a process
Valuta tu se ha il livello di precisione di cui hai bisogno. Altrimenti, hai bisogno di eseguire il programma all'interno di un profiler (sicuramente con scadimento di performance) e comunque in questo caso non ti potrei aiutare.

Il comando pmap richiede il pid del processo in questione, che ricavi con

Codice: Seleziona tutto

pgrep 'nome_del_programma' 
nell'output di pmap quello che ti interessa, cioè il totale, sta nell'ultima linea ed è espresso in kB quindi se vuoi "il numero dei MB nudo e crudo" si può usare awk in questo modo:

Codice: Seleziona tutto

pmap $(pgrep 'nome_del_programma') | awk '/total/ {print $2/1000}'
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1703
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: [CLI] Quanta ram usa un processo

Messaggio da korda »

Ma quale script?! basta una riga:

Codice: Seleziona tutto

top | grep --line-buffered "systemd" >> pippo.txt
Ovviamente il grep lo devi puntare sul processo che vuoi monitorare (questo è un esempio). Inoltre bisognerebbe aggiungere qualche opzione per formattare meglio il log file prodotto. Lo puoi temporizzare per non salvarti vagonate di righe. Eccetera, eccetera...

Però @rinosan_76 quello che chiedi, a riga di comando, in linea di principio dovrebbe essere questo.
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
rinosan_76
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1374
Iscrizione: sabato 18 marzo 2006, 13:41

Re: [CLI] Quanta ram usa un processo

Messaggio da rinosan_76 »

Ok almeno abbiamo fatto un passo avanti...

@rai
ho provato a vedere firefox quanto consuma e il monitor di sistema mi da 542MB mentre il tuo comando 4190 (credo MB) cosa mi sfugge?

@korda
Lo script che mi serve non è per sapere quanti MB consuma ma in base a questo dato lo script farà cose... giusto per capirci, quindi non posso usare il monitor di sistema...
Il tuo comando mi riporta questo:

3010 user 20 0 4206108 542552 173388 S 0,3 6,8 96:16.41 firefox

continuando a stampare più righe. Ma in questo caso il risultato non è il numero dei MB usati, ma la riga di top che riguarda firefox.
La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.      [Francisco Goya]
http://www.mangioebevo.it
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1703
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: [CLI] Quanta ram usa un processo

Messaggio da korda »

rinosan_76 ha scritto:
venerdì 23 luglio 2021, 13:43
Ok almeno abbiamo fatto un passo avanti...

@rai
ho provato a vedere firefox quanto consuma e il monitor di sistema mi da 542MB mentre il tuo comando 4190 (credo MB) cosa mi sfugge?

@korda
Lo script che mi serve non è per sapere quanti MB consuma ma in base a questo dato lo script farà cose... giusto per capirci, quindi non posso usare il monitor di sistema...
Il tuo comando mi riporta questo:

3010 user 20 0 4206108 542552 173388 S 0,3 6,8 96:16.41 firefox

continuando a stampare più righe. Ma in questo caso il risultato non è il numero dei MB usati, ma la riga di top che riguarda firefox.
Non ho capito... vuoi fai a far fare allo script delle azioni in base al consumo della RAM. Ma se non la monitori come fai a decidere?

Io ho risposto a questo, specificamente:
rinosan_76 ha scritto:
giovedì 22 luglio 2021, 14:11
Scusa ma così non ottengo ciò che mi serve. Io ho bisogno di un qualcosa (se esiste ovviamente) che da terminale (Command line utilizzabile con bash) mi ritorni solo il numero di MB usati solo dal processo interessato.
Magari lo fa top, ma io non saprei farlo. Immagina di fare uno script che se il processo firefox supera 1000MB mi manda una mail.
Quel 1000 come lo ricavo?
Grazie :)
Rino
In ogni caso top dà la stessa cosa del monitor di sistema:

3010 user 20 0 4206108 542552 173388 S 0,3 6,8 96:16.41 firefox

Le colonne di top indicano, rispettivamente:
PID: l'id del processo attivo.
USER: l'utente che ha lanciato il processo.
PR: indica la priorità dell'attività.
NI: indica l’indice del processo. Un valore positivo negativo indica una priorità più elevata, mentre un valore positivo positivo indica una priorità inferiore.
VIRT: il valore complessivo di memoria virtuale utilizzata.
RES: la quantità di memoria residente utilizzata.
SHR: rappresenta la dimensione della memoria condivisa (kb) utilizzata da un'attività.
S: Lo stato di una attività. I valori possibili sono S (sleeping), D (uninterruptible sleep), R (running), Z (zombies), o T (stopped or traced).
%CPU: Percentuale di CPU utilizzata da un'attività.
%MEM: Percentuale RAM utilizzata da un'attività.
TIME+: il tempo totale di CPU utilizzata
COMMAND: Il comando utilizzato per creare il processo
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
rinosan_76
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1374
Iscrizione: sabato 18 marzo 2006, 13:41

Re: [CLI] Quanta ram usa un processo

Messaggio da rinosan_76 »

ok perfetto diciamo che usiamo top. Top però non mi da come risultato un numero da poter mettere in una variabile e poi valutare. Mi torna una serie di stringhe composte da quella roba che hai elencato. In più top si avvia e non si ferma ad un risultato.

il mio script sarà una cosa simile:

Codice: Seleziona tutto

#! /bin/bash

MAXRAM=10
controlli miei
faccio cose mie

MB= $(comando che mi ritorna numero)

if( $MB -gt $MAXRAM)
then
  faccio cose
else
  faccio altre cose
fi
exit 0
La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.      [Francisco Goya]
http://www.mangioebevo.it
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2842
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [CLI] Quanta ram usa un processo

Messaggio da rai »

ho provato a vedere firefox quanto consuma e il monitor di sistema mi da 542MB mentre il tuo comando 4190 (credo MB) cosa mi sfugge?
Sì il calcolo della memoria usata non è univoco, se vedi in rete ci sono diversi discorsi a proposito.
A partire da rilievi più grossolani: se nel mio monitor di sistema scrivo "firefox" oltre alla riga del browser propriamente detto mi vengono listate altri processi che sommati tra loro impegnano la stessa RAM del browser.
Parte delle incongruenze derivano anche dell'annosa questione dell'unità di misura: almeno il mio monitor di sistema (ksysguard) usa KiB e MiB quindi il valore riportato è inferiore di un fattore 1024 a quello che sarebbe in KB e MB
Poi pmap ti fa il totale della memoria usata da tuuutte le librerie usate dal processo che stai valutando e quindi giocoforza il risultato è maggiore. Per vederlo basta che esegui quel comando togliendo la redirezione ad awk

Comunque
rinosan_76 ha scritto:
venerdì 23 luglio 2021, 18:32
ok perfetto diciamo che usiamo top
se devi mettere top in uno script "meglio" usarlo con le opzioni -b e -n; poi ne mandi l'output ad awk per farti stampare la colonna di cui hai scelto di fidarti: $5 per VIRT, $6 per RES, $7 per SHR
esempio:

Codice: Seleziona tutto

top bn1 | awk '/nomedelprogramma/ {print $7}'
rinosan_76
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1374
Iscrizione: sabato 18 marzo 2006, 13:41

Re: [CLI] Quanta ram usa un processo

Messaggio da rinosan_76 »

Grazie provo a capirci qualcosa... io con pmap ricevo un dato che mi pare facile da gestire soprattutto se corretto :)
Tu quale approccio mi consigli?
La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.      [Francisco Goya]
http://www.mangioebevo.it
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2842
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [CLI] Quanta ram usa un processo

Messaggio da rai »

rinosan_76 ha scritto:
venerdì 23 luglio 2021, 22:39
Grazie provo a capirci qualcosa... io con pmap ricevo un dato che mi pare facile da gestire soprattutto se corretto :)
Tu quale approccio mi consigli?
non c'è sostanziale differenza nel modo di usare il dato che si sceglie, il punto è usare una misura che corrisponda a quello che serve.

Se toccasse a me farei le cose seguenti in questo ordine:
· studiare la documentazione di pmap, top, ps, free etc.
· cercare le parole chiave per trovare risposta in rete
· come ultima ratio, cercare empiricamente quale dato, di quale tool corrisponde meglio alla RAM richiesta dal mio programma: per es. userei come riferimento quello che restituisce top come memoria totale impegnata durante l'esecuzione del programma e dopo averlo killato (nell'output di top è la riga che comincia con `MiB Mem :')
A questo punto, confronterei la differenza tra i due numeri (che sono in MiB) con il dato di pmap, con le colonne di top, etc e sceglierei per il mio script quello che ci si avvicina di più.

Per confrontare più facilmente i dati puoi eseguire questo (il risultato, sempre in MiB, é la differenza tra la memoria totale usata con programma in esecuzione e senza)

Codice: Seleziona tutto

echo $(nomeprogramma & sleep 5; LC_ALL=C top bn1 | awk '/ Mem :/ {print $8}') - $(pkill nomeprogramma ; LC_ALL=C top bn1 | awk '/ Mem :/ {print $8}') | bc
NB Ho messo uno sleep 5; nel caso il programma ci metta un po' e occupi progressivamente più RAM: si può togliere del tutto o invece aumentarne il numero se serve
Scrivi risposta

Ritorna a “Applicazioni”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot], Google [Bot] e 22 ospiti