Polvere di stelle

[Linux] Farsi avvertire per esaurimento memoria

« Older   Newer »
  Share  
view post Posted on 1/10/2017, 09:41
Avatar

Nubbio x Sempre

Group:
Moderatore Globale
Posts:
7,226

Status:


Ciao ... è tantissimo che non scrivo qualcosa di utile, ricominciamo? :D

Una delle cose che mi piace di Linux è la sua configurabilità. In effetti questo sistema operativo può essere personalizzato con una facilità sorprendente.

Imbeccato da un utente del forum Ubuntu-it, in questo post, ho partecipato alla realizzazione di uno script che fa apparire un avvertimento all'esaurirsi della RAM ... cosa che sarebbe certamente molto più utile agli utenti windows per evitare i bruschi rallentamenti dovuti ad eccessi al disco per la memoria virtuale, ma che (raramente) capita anche in linux quando si aprono troppe finestre e si finesce ad utilizzare l'area di swap (memoria virtuale anch'essa)

Pur non servendomi troppo, dato che utilizzo concky ed ho costantemente sotto controllo i punti critici di sistema, ad anche se raramente arrivo ad utilizzare la metà degli 8 Gb di RAM che ho, però vi sono occasioni in cui alloco immense quantità di dati in memoria, tipo quando eseguo elaborazioni video o lancio applicazioni da me fatte, in tali casi è utile sapere in anticipo quando la memoria sta per esaurirsi, in maniera da chiudere le applicazioni superflue ed evitare, per quanto possibile,rallentamenti nel sistema.

Per far ciò, è sufficiente il semplicissimo script che segue :
CODICE
#!/bin/bash

tot=$(free|awk '/^Mem:/{print $2}')
soglia=$(($tot*10/100))

while :
do
  libera=$(free|awk '/^Mem:/{print $4}')
  if (("$libera" < "$soglia"))
  then
     notify-send -t 3000 "Poca memoria disponibile"
  fi
  sleep 60
done

variante di quello proposto all'utente del post citato.

questo script invoca il comando free, che da in output i dati sulla memoria di sistema
CODICE
$ free
             total        used        free      shared  buff/cache   available
Mem:        8085376     1254456     5570744      261960     1260176     6296812
Swap:       7999484           0     7999484


e da in pasto ad awk, un eccellente linguaggio di manipolazione stringhe che, purtroppo, conosco poco, l'output ottenuto, awk rintraccia la stringa che inizia con "Mem" e si legge il secondo campo (gli spazi separano i campi) che riporta la memoria totale di sistema (8085376) che viene restituita.
Si calcola al 10% della memoria totale la soglia di avviso (istruzione "soglia=$(($tot*10/100))"), che rappresenta il limite oltre il quale scatenare l'avvertimento.
Quindi ci si pone in un ciclo infinito che ogni minuto controlla la memoria libera (istruzione "libera=$(free|awk '/^Mem:/{print $4}')"), qui viene letto e restituito il 4° campo della riga individuata con "Mem" in free e se questa è minore della soglia viene lanciato l'avviso che appare per tre secondi (istruzione "notify-send -t 3000 "Poca memoria disponibile"".

Questo script, da me denominato "controllamem.sh", va dotato dei permessi di esecuzione o tramite comandi grafici oppure con il comando
CODICE
chmod +x controllamem.sh


da terminale, posizionati nella direttrice dello script, ovvero indicando il path relativo.

Ovviamente, va fatto avviare alla apertura di una vostra sessione di lavoro, in ambiente Unity di Ubuntu è sufficiente aprire "Applicazioni di Avvio" e dare il comando "Aggiungi", quindi, nella finestra che compare compilare il campo "Nome", dare il riferimento assoluto al vostro script (o selezionarlo dalla finestra richiamata con "Esplora...", aggiungere un eventuale commento e dare il comando "Aggiungi".

Ovviamente, su distribuzioni diverse, utilizzate i mezzi a voi disponibili.

Ciao :)
 
Web  Top
0 replies since 1/10/2017, 09:41   182 views
  Share