Spiegazione /etc/security/limits.conf di Linux


9

Qualcuno può spiegare (o conoscere una fonte) che fornisce dettagli sugli elementi in limits.conf? La pagina man non fornisce molti dettagli.

Ad esempio dice:

rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

In che modo sono diversi? Quali valori possono assumere? Che cosa fanno di default?

Alcuni degli elementi sono ovvi, ma dove posso trovare spiegazioni migliori (valori predefiniti, intervalli, cosa significano effettivamente ecc.) Di:

data 
maximum data size (KB) 

fsize 
maximum filesize (KB) 

memlock 
maximum locked-in-memory address space (KB) 

cpu 
maximum CPU time (minutes) 

nice 
maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19] 

Cosa succede quando viene superata la CPU? I processi vengono uccisi? Solo un processo o l'intero utente è vietato dall'uso della CPU? È per una sessione o per un tempo massimo in ogni minuto?

Ho cercato di trovare le risposte, ma tutto quello che riesco a trovare è l'unica pagina man che non fornisce quasi alcun dettaglio.


Il rute è un'eccellente introduzione all'amministrazione Linux - sebbene non fornisca molti dettagli su limits.conf, ti dice dove trovare queste informazioni - rute.2038bug.com/index.html.gz
symcbean

Risposte:


18
rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

Perché sono diversi?

Esistono diverse classi di programmatori di processo su Linux. Quello di default (CFQ) sostanzialmente fornisce una quantità uguale di intervalli di tempo a ciascun processo che desidera eseguire e mette in coda le attività eseguibili in modo tale che tutti aspettino in media un uguale periodo di tempo per il loro turno. Esistono alcune eccezioni a questa regola, ma questa è l'idea di base.

Un'altra classe di scheduler è lo scheduler in tempo reale. Il tempo reale è un po 'diverso, attività piuttosto eseguibili in coda in uno schema di accodamento equo, il processo in tempo reale otterrà il tempo della CPU non appena è necessario dal processo, questo sfrutta un processo in esecuzione dalla CPU al fine di fare spazio per il' tempo reale ' processi.

Quali valori possono assumere?

Ciò che la "priorità" fa è alterare la gentilezza della processione in modo che al momento dell'accesso il processo principale inizi con una certa gentilezza, anche i processi figlio generati iniziano con la stessa gentilezza.

Ciò ha l'effetto di rendere più probabile la pianificazione in favore di altri processi concorrenti e l'esperienza dell'utente può essere resa più reattiva / interattiva per i valori di gentilezza inferiori e meno reattiva / interattiva se la gentilezza è aumentata.

Potrebbe essere importante per gli utenti con accesso normale avere una priorità inferiore rispetto ai demoni utilizzabili, ad esempio, oppure root avere una priorità sull'accesso rispetto a tutto il resto.

Per quanto riguarda il tempo reale, la contesa viene gestita con il campo "rtprio". Se hai due attività in tempo reale che vogliono eseguire entrambe, il valore 'rtprio' viene utilizzato per determinare quale dei processi scegliere prima per priorità. Un rtprio più elevato produce attività con priorità più elevata.

Impostandolo in limits.conf, è possibile impostare le attività in tempo reale su una particolare banda prioritaria senza la necessità di root per impostare il valore. Ciò non ha alcun effetto sulle attività non impostate per essere eseguite utilizzando uno scheduler in tempo reale.

Il valore "bello" dovrebbe fare lo stesso di "rtprio" ma per la pianificazione CFQ standard. Non l'ho mai provato però. Imposta il processo iniziale generato quando PAM sta impostando questi limiti su quel bel vaule, un utente normale può quindi passare a quel bel livello o superiore senza bisogno di root per impostarli. Se non si rinnova esplicitamente, significa che tutti i processi generati da una shell da quel login (per esempio) erediteranno il bel valore impostato in limits.conf dal processo genitore che era stato inizialmente creato.

Quali sono le impostazioni predefinite?

I limiti 'predefiniti': tecnicamente sono tutti impostati su ciò che è pid 1, a meno che non sia esplicitamente impostato, i limiti delle risorse sono ereditati dal processo padre, se non sono stati definiti o sovrascritti limiti da nessuna parte, allora l'ereditarietà initè quella predefinita.

Altri valori

data 
maximum data size (KB) 

Quando un processo viene inizializzato, alloca parte della memoria nota come "segmento di dati" quando il processo viene copiato in memoria, qui è dove si trova lo spazio per i globi, forse alcuni altri dati inizializzati e la memoria allocata dall'heap. Il limite controlla la quantità massima assegnata che un processo può richiedere.

È improbabile che tu abbia mai raggiunto questo limite perché malloc () usa raramente il segmento di dati per archiviare i dati.

fsize 
maximum filesize (KB) 

Questo imposta letteralmente solo la dimensione massima su cui un file può essere scritto come con quell'utente.

memlock 
maximum locked-in-memory address space (KB) 

Quasi tutta la memoria acquisita da un'applicazione è "evictable". Questo può essere scambiato. La memoria bloccata non è mai sostituibile e rimane residente. Questo valore è rigorosamente controllato perché può essere abusato dalle persone per far morire di fame un sistema di memoria e causare lo scambio. In genere è utile con le applicazioni di sicurezza (che non vogliono mai scambiare le proprie pagine e diventare leggibili dalla partizione di swap).

cpu 
maximum CPU time (minutes) 

Ciò rappresenta il tempo totale che un processo può impiegare su una CPU. Un processo che supera questo valore viene interrotto. Si noti che NON corrisponde al tempo trascorso dall'avvio del processo. Per esempio, un limite di cputime di 1 minuto richiederebbe 1 minuto per essere consumato se il processo avesse un utilizzo della CPU del 100%, ma 2 minuti per consumarlo se il processo usasse un utilizzo del 50%.

Cosa succede quando viene superato il CPU?

Al processo viene inviato un segnale di SIGXCPUinterruzione che termina il processo. Questo può quindi essere catturato dal processo padre e gestito lì.

Solo un processo o l'intero utente viene escluso dall'uso della CPU?

Quasi tutti i limiti indicati sono gestiti in base al processo. Tempo CPU incluso. Credo che i soli a non essere il numero totale di accessi e il numero totale di processi da parte di quell'utente.

Alcuni altri trucchi con limiti sono:

  • I processi max includono il numero di fili leggeri.
  • Il limite RSS non fa nulla e non ha per un certo numero di anni, è inutile impostare.

1

Questo è per il pam_limitsmodulo ... è setrlimit(2)e sysctl(8)valori. La mia ricerca non ha rivelato alcun limite, ma le pagine man citate forniscono alcune spiegazioni.


1

Le risposte rapide sono belle risposte, quindi ecco qui.

  • Scopri i valori minimo e massimo per le priorità con schedtool -r; e
  • interrogare i limiti attuali con ulimit -a.

Non dimenticare di impostare i limiti sia soft che hard, anche se avrebbero lo stesso valore. Nei miei test, questa era l'unica cosa che avrebbe mostrato una differenza nel comando ulimit.

Spero che questo ti aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.