I valori limits.conf vengono applicati in base al processo?


25

Sto sintonizzando il nofilevalore /etc/security/limits.confper il mio utente Oracle e ho una domanda sul suo comportamento: nofilelimita il numero totale di file che l'utente può avere aperto per tutti i suoi processi o limita il numero totale di file che l'utente può avere aperto per ciascuno dei suoi processi?

In particolare, per il seguente utilizzo:

oracle                  hard    nofile                  65536

Risposte:


23

La maggior parte dei valori¹ in limits.confsono limiti che possono essere impostati con il ulimitcomando shell o la setrlimitchiamata di sistema. Sono proprietà di un processo. I limiti si applicano indipendentemente per ogni processo. In particolare, ogni processo può avere fino a nofilefile aperti. Non c'è limite al numero di file aperti accumulati dai processi di un utente.

Il nproclimite è un po 'un caso speciale, in quanto somma su tutti i processi di un utente. Tuttavia, si applica comunque per processo: quando un processo chiama forkper creare un nuovo processo, la chiamata viene negata se il numero di processi appartenenti all'euid del processo è maggiore del RLIMIT_NPROCvalore del processo .

La limits.confpagina man spiega che i limiti si applicano a una sessione. Ciò significa che tutti i processi in una sessione avranno tutti gli stessi limiti (a meno che non vengano modificati da uno di questi processi). Ciò non significa che qualsiasi somma venga fatta sui processi in una sessione (non è nemmeno qualcosa che il sistema operativo tiene traccia - esiste una nozione di sessione, ma è più fine di quella, per esempio ogni applicazione X11 tende a finire nella propria sessione). Il modo in cui funziona è che il processo di accesso si pone alcuni limiti e sono ereditati da tutti i processi figlio.

¹ Le eccezioni sono maxlogins, maxsysloginsechroot che vengono applicati come parte del processo di accesso per negare o connettere influenza.


Viceversa, ciò significa che sessioni diverse possono avere diversi set di limiti?
CMCDragonkai,

1
@CMCDragonkai Sì, ad esempio se è limit.confcambiato tra le volte in cui le sessioni sono state aperte o se sono impostati limiti diversi (dovrebbero essere più piccoli ad eccezione del root) .profile.
Gilles 'SO- smetti di essere malvagio' il

1
@laimison Se si esegue l'iterazione su tutti i processi in esecuzione e si esegue prlimit --pid $pidsu ciascuno di essi, è possibile modificare efficacemente il limite per una sessione attiva. Nota che potresti doverlo fare alcune volte nel caso in cui alcuni processi vengano biforcati mentre stai iterando.
Gilles 'SO- smetti di essere malvagio'

1
@laimison No. Supponi che un utente abbia solo due processi A e B, con RLIMIT_NPROCimpostato su 2 in A e su 3 in B. Quindi B può eseguire un fork di un altro processo, ma A no.
Gilles 'SO- smetti di essere malvagio' il

1
@laimison Se imposti il ​​limite su 2 nel genitore B e non lo cambi in B dopo il biforcazione, allora il limite di B sarà 2. Se imposti il ​​limite su 2 nel genitore B ma aumenti il ​​limite in B, o se imposti il ​​limite su 3 nel genitore B prima di biforcarlo e impostalo su 2 dopo il biforcimento B, B avrà il limite impostato su 3. L'unico limite che conta è quello nel processo che chiama fork (), non il limite nel genitore di quel processo o in qualsiasi altro processo.
Gilles 'SO- smetti di essere malvagio' il
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.