echo -n "Max open files=20:20" > /proc/$pid/limits
...funziona in RHEL5.5 e RHEL6.7.
Si noti che "-n" è obbligatorio; una nuova riga finale genererà un reclamo per argomenti non validi.
Un'altra opzione è usare il comando prlimit (dal pacchetto util-linux). Ad esempio, se desideri impostare il numero massimo di file aperti per un processo in esecuzione su 4096:
prlimit -n4096 -p pid_of_process
Potresti usare gdb, entrare nel processo, chiamare le suddette chiamate di sistema per aumentare il limite che ti interessa, quindi continuare il lavoro ed uscire da gdb. Ho modificato le cose al volo in questo modo un paio di volte.
La tua app non sarebbe inattiva, ma solo bloccata per il momento mentre eseguivi la chiamata. se sei veloce (o lo script!), probabilmente non si noterà.
Come amministratore di sistema :Il /etc/security/limits.conf
file lo controlla sulla maggior parte delle installazioni Linux; ti consente di impostare limiti per utente. Avrai bisogno di una linea come myuser - nofile 1000
.
All'interno di un processo :le chiamate getrlimit e setrlimit controllano la maggior parte dei limiti di allocazione delle risorse per processo. RLIMIT_NOFILE
controlla il numero massimo di descrittori di file. Avrai bisogno delle autorizzazioni appropriate per chiamarlo.