Raccolta di howto, informazioni, consigli, trucchi e documentazione di varia utilità per ricordare tante cose utili

mercoledì 28 ottobre 2009

Uso del comando ulimit in Linux

Il comando ulimit è un comando interno della shell Bash che permette di controllare e limitare l'accesso a risorse globali di sistema da parte della shell nella quale lo si esegue e da parte dei processi derivati.
Per vedere tutti i limiti impostati si può utilizzare il comando

ulimit -a

I limiti impostabili in Linux (kernel 2.6.30) sono i seguenti:
  • ulimit -c -> core file size in blocchi: limite massimo delle dimensioni del file di core (file generato dal sistema al crash di un eseguibile). Solitamente posto a 0 (nessun file di core può essere generato) può essere utile impostarlo a unlimited per in caso si voglia effettuare un debug postmortem di un'applicazione. Utile soprattutto durante la fase di sviluppo
  • ulimit -d -> data segment size in kB: dimensione del segmento dati. Generalmente posto a unlimited; può essere utile ridurlo durante la fase di sviluppo per simulare il funzionamento di un applicazione in un ambiente con poca memoria
  • ulimit -e -> scheduling priority: la priorità di base del processo (sostanzialmente il nice)
  • ulimit -f -> max file size in blocchi: massima dimensione dei file scrivibili dal processo. Solitamente posto a unlimited. Se il processo tenta di scrivere un file di dimensione maggiore di quelle permesse viene terminato con un segnale del tipo SIGXFSZ.
  • ulimit -i -> max pending signals: numero massimo di segnali in coda per il processo. Solitamente posto ad un valore di circa 30000 (2^15 - qualcosa). 
  • ulimit -l -> max locked memory in kB: Generalmente impostato a qulche decina (tra 32 e 64) imposta la dimensione massima della memoria che può essere bloccata in ram (non paginabile su disco). Aumentare questo valore può rendere inefficiente la gestione della memoria da parte del S.O. tuttavia può essere necessario in particolari applicazioni real-time dove l'accesso al disco può risultare incompatibile con le necessità del real-time.
  • ulimit -m -> max memory size in kB: quantità massima di memoria fisica utilizzabile da un processo. Generalmente impostata a unlimited può essere utilile limitarla per alcuni processi che devono funzionare in modo non assistito (batch) e che debbono avere ridotti impatti sul sistema complessivo.
  • ulimit -n -> max open file: numero massimo di file aperti contemporaneamente.
  • ulimit -p -> pipe size in unità di 512 byte: dimensione della pipe.
  • ulimit -q -> max POSIX message queue size in byte: dimensione massima della ram utilizzata dalle message queue POSIX. Generalmente impostata a 800 kB può essere necessario aumentarla per processi che impiegano massicciamente questi elementi del sistema. Se si eccede il limite la richiesta di creazione della coda mq_open fallisce con errore ENOMEM
  • ulimit -r -> real-time priority
  • ulimit -s -> max stack size in kB: dimensione massima dello stack. Generalmente impostata a 8MB
  • ulimit -t -> max cpu time in secondi: massimo tempo di cpu utilizzabile dal processo, utilizzato il quale il processo viene terminato con un segnale del tipo SIGXCPU. Generalmente impostato a unlimited può essere ridotto se si vuole che un processo possa utilizzare la cpu per un periodo massimo di tempo
  • ulimit -u -> max user process: numero massiomo di processi che un singolo utente può avere attivi contemporaneamente. Contrariamente agli altri valori gestibili con ulimit questo limite non agisce a livello di permesso ma di utente. Una chiamata a fork dopo aver raggiunto questo limite genera un errore del tipo EAGAIN
  • ulimit -v -> max virtual memory in kB: quantità massima di memoria virtuale utilizzabile dal processo. Generalmente posta a unlimited. Se si eccede il limite un'uteriore richiesta di allocazione di memoria fallisce con ENOMEM
  • ulimit -x -> max file locks
Sono impostabili due tipi di limiti:
  • I limiti Hard sono impostabili esclusivamente da un utente con i privilegi di root e si impostano aggiungendo il flag -H alla linea di comando (e.g. ulimit -Hl per impostare la massima quantità di memoria bloccabile in ram; ulimit -Ha per visualizzarli tutti)
  • I limiti Soft, impostabili con i comandi visti sopra possono esere modificati da qualsiasi utente per i propri processi nei limiti imposti dai parametri Hard.

Nessun commento: