Indietro Indice Home PHC Avanti


Limitazioni sulle risorse utilizzate

Una caratteristica molto utile di un sistema linux è la sua capacità di gestire delle limitazioni per quanto riguarda le risorse utilizzate dai vari utenti. Queste limitazioni riguardano molti tipi di risorse, per esempio lo spazio disco utilizzato da ogni utente (vedi le quote), o utilizzato in totale dagli utenti non privilegiati (la percentuale di blocchi riservati in un filesystem), ma anche e soprattutto il numero di processi di proprietà di un utente che girano contemporaneamente, la quantità di memoria occupata et coetera.

Per capire quanto siano efficaci facciamo un piccolo esempio: supponiamo che faccia andare, senza aver impostato nessun limite per gli utenti, un programma tipo questo 3:

main(){

while(1)
fork();
}

Il processo comincerà a generare un mucchio di figli, e dopo un po` il sistema diventerà inutilizzabile, visto che ogni volta che si proverà ad eseguire un comando si verificherà qualcosa simile a questa:

[messina@sophie seminario$] ps ux
bash: fork: Resource temporarily unavailable
[messina@sophie seminario$]

Se invece viene impostato un limite massimo al numero di processi che un utente può eseguire, il mio programma, dopo un po', non potrà più ``forkare'', e solo io non potrò più fare nulla. Per tutti gli altri utenti la macchina sarà, al massimo, un po' lenta.

Un'altra cosa interessante è che le limitazioni valgono per login, ovvero se entro via rete o da un'altra console si applicano nuove restrizioni. È quindi necessario limitare anche il numero massimo di login che un utente può fare...

Oltre a questo tipo di limitazione, ricordiamo che comunque un processo può scrivere solo nell'area di memoria che il kernel assegna lui, in modo che nessun processo possa interferire con gli altri processi. Si può inoltre limitare la quantità di memoria occupata da un processo, visto che il completo riempimento della memoria può provocare diversi effetti sgradevoli...

A questo proposito, in uno dei miei esperimenti, ho fatto partire un programma che forkava in continuazione e allocava sempre più memoria, e non avevo impostato limiti né di processi né di memoria. Il risultato è stato che la macchina dopo poco è diventata inutilizzabile, e senza nemmeno che provassi a fare qualcosa comparivano una serie di:

Out of memory for bash

Non c'è stata possibilità di recuperare, anche se in questa situazione si è comunque dimostrata la stabilità del sistema... I processi infatti giravano regolarmente, molto lentamente, nessun processo poteva più forkare, e quindi non potevo lanciare altri processi, la memoria era completamente occupata, ma il kernel continuava a funzionare, e quindi, per esempio tramite i MAGIC SYSRQ KEY 4ho potuto sincronizzare i filesystem e resettare con una certa tranquillità...


Antonio Messina
2000-03-17