Imposta il limite massimo di file su un processo in esecuzione


27

Ho un lungo processo che alla fine colpirà il limite massimo di file aperti. So come cambiarlo dopo che fallisce, ma c'è un modo per cambiarlo per il processo in esecuzione, dalla riga di comando?

Risposte:


28

Sui kernel più recenti (2.6.32+) su CentOS / RHEL è possibile modificarlo in fase di esecuzione con / proc / <pid> / limits:

cd /proc/7671/
[root@host 7671]# cat limits  | grep nice
Max nice priority         0                    0                    
[root@host 7671]# echo -n "Max nice priority=5:6" > limits
[root@host 7671]# cat limits  | grep nice
Max nice priority         5                    6                    

Quelle regole! Non avevo idea di poter scrivere nel file dei limiti.
Clee

4
non funziona per me su Ubuntu 12.04
Poma,

5
Questo non funziona sul mio kernel 3.2 . Immagino che la tua distribuzione abbia una specifica patch non ufficiale per questo perché non vedo traccia di questa patch nel file fs / proc / base.c del kernel .
Totor

Potrebbe essere ... So che è presente nei kernel RHEL / CentOS. Non sembra essere presente nei kernel Debian.
Sig-IO,

2
'setprlimit' è il modo a prova di futuro e raccomandato, vedi la prossima risposta
Sig-IO

26

Come documentato qui , il prlimitcomando, introdotto con util-linux 2.21, consente di leggere e modificare i limiti dei processi in esecuzione.

Questo è un seguito allo scrivibile /proc/<pid>/limits, che non è stato integrato nel kernel mainline. Questa soluzione dovrebbe funzionare.

Se non lo hai prlimit(1)ancora, puoi trovare il codice in una versione minimalista nella prlimit(2)manpage .


2
+1 per la versione minimalista nella manpage!
Totor

Avvertenza: "memcached" segfault se si modifica "nolimit" sul suo processo dopo aver riscontrato un limite. Non è sempre una buona idea usare i limiti scrivibili
John


2

Puoi provare ulimit man ulimitcon l'opzione -n, tuttavia la pagina mag non consente alla maggior parte dei sistemi operativi di impedire l'impostazione.

È possibile impostare un limite di descrizioni dei file a livello di sistema utilizzando sysctl -w fs.file-max=Ne rendere persistenti le modifiche dopo l'avvio/etc/sysctl.conf

Tuttavia, suggerirei anche di esaminare il processo per vedere se ha davvero bisogno di avere così tanti file aperti in un determinato momento, e se in effetti è possibile chiudere alcuni file ed essere più efficienti nel processo.


La cosa del file aperto è un bug, ma non sono stato in grado di capirlo. Anche se mi piacerebbe farlo, la produzione si blocca periodicamente a metà giornata.
kāgii,

ulimitnon applica le impostazioni ai processi in esecuzione .
Try-catch-finalmente il

0

Il processo potrebbe cambiare i propri limiti soft se programmato per farlo (o se riesci a hackerarlo), ma non può aumentare i suoi limiti rigidi a meno che non abbia la capacità CAP_SYS_RESOURCE. È possibile controllare i limiti in fase di esecuzione in /proc/$pid/limits.

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.