OSX: utilizzare il comando 'purge' per recuperare memoria non utilizzata



UPDATE 30/10/2013: lo script non e' utilizzabile (e necessario, vista la nuova gestione della memoria) su OSX Mavericks

Sull'App Store di OSX ho notato un buon numero di applicazioni dedicate alla gestione della memoria: permettono in pratica di effettuare una pulizia della RAM liberando spazi di memoria attualmente inattiva.
Applicazioni come FreeMemory, Flush Memory, Memory Scope (giusto i primi 3 risultati su AppStore) si occupano tutte di effettuare la stessa operazione (e solitamente sono a pagamento).

Ma sono davvero necessarie e, soprattutto, è possibile avere lo stesso risultato con una soluzione hand-made?



La pulizia della memoria è necessaria?


Per comprendere meglio la gestione della memoria di OSX per prima cosa apriamo l’Activity Monitor , da Finder -> Applicazioni ->Utilities-> Monitoraggio Attività e selezioniamo il tab Memoria Sistema.



Vedremo 4 voci:

Libera: la memoria libera che nessun programma sta usando
Wired: la memoria utilizzata che non puo’ essere swappata (trasferita su disco)
Attiva: memoria utilizzata dal sistema e dalle applicazioni (swappabile)
Inattiva: il pomo della discordia

Sulla carta, il sistema è efficiente: se si chiude un’applicazione è probabile che la si riutilizzerà in seguito e lasciandola nella memoria si diminuiscono notevolmente i tempi di riavvio.

Se successivamente l'applicazione non viene utilizzata, OSX avvia a intervalli regolari una garbage collection che libera la memoria inattiva.

Cosa succede però se ci si trova nella situazione riportata nell'immagine, con una grossa percentuale di memoria inattiva e poca memoria libera, e si avvia una applicazione avida di risorse?
OSX cerca di non toccare la memoria inattiva, sempre nell'ottica di fornire una perfetta user experience con le applicazioni che si avviano nel minor tempo possibile, e inizia a spostare su disco parte della memoria attiva (inizia a swappare). Il processo tende quindi a rallentare le applicazioni attualmente aperte che, se interessate da uno swap pesante, possono smettere di rispondere per qualche secondo e iniziare a presentare la fatidica Spinning Pinwheel.

In alcuni casi, quindi, la pulizia della memoria inattiva potrebbe migliorare nell'immediato le prestazioni del Mac.

E' necessario acquistare un'applicazione dedicata alla gestione della memoria?


No: la funzionalità è già presente in OSX, a patto di aver installato gli strumenti di sviluppo di XCode (gratuiti).

Il comando da utilizzare è purge, da richiamare in una qualsiasi finestra di terminale: in pochi secondi libererà la memoria inattiva, trasformandola in libera.

Se per alcuni può risultare scomodo aprire la finestra di terminale e digitare il comando (non tutti sono sviluppatori sempre con la console sotto mano ;-) ), è possibile realizzare un breve applescript che permette con un click di liberare la memoria, vediamo un esempio:



Lo script si occupa di leggere lo stato della memoria libera, eseguire il comando purge, verificare nuovamente il valore di memoria libera e presentare un box con il valore di ram recuperata.

Trasformiamolo in una App!


Lo script appena creato può inoltre essere inglobato in un flusso di lavoro di Automator (vedi immagine) e salvato come una piccola app da lasciare sul dock a portata di mouse:


Per i pigri, ho già realizzato il pacchetto che può essere scaricato da QUESTO INDIRIZZO 

UPDATE 15:24: L'eseguibile è compatibile con OSX 10.7 e superiori, grazie a nicoladagostino per la segnalazione su Hackingitalia.

Spero sia utile! ;-)

Published: June 17 2013

  • category: