2010-09-17 8 views
11

È possibile aumentare il parametro "Max file aperti" per il processo di lavoro? voglio dire questo parametro:"Max file aperti" per il processo di lavoro

cat /proc/<pid>/limits | grep files 

Grazie per i vostri consigli

+0

Ulteriori informazioni: il mio processo è 'java'. Devo aumentare "Max file aperti" senza interrompere il processo. – wako

risposta

21

Come amministratore di sistema: il file /etc/security/limits.conf controlla questo nella maggior parte delle installazioni di Linux; ti consente di impostare i limiti per utente. Vorresti una riga come myuser - nofile 1000.

All'interno di un processo: The getrlimit and setrlimit calls controlla la maggior parte dei limiti di allocazione delle risorse per processo. RLIMIT_NOFILE controlla il numero massimo di descrittori di file. Avrai bisogno di autorizzazioni appropriate per chiamarlo.

+0

Sembra che questo sia ciò di cui ho bisogno.Posso impostare "setrlimit (RLIMIT_NOFILE, ...)" per qualche processo esterno? – wako

+0

Non ne conosco. Se c'è, ho il sospetto che tu possa trovarlo sepolto in profondità in alcune guide di programmazione specifiche per Linux, perché non riesco a capire dove possa essere collocato POSIX standard. –

+0

Talvolta 'limits.conf' non viene preso in considerazione e devi impostare' DefaultLimitNOFILE' in '/ etc/systemd/system.conf' e' user.conf'. – Xdg

4

This link dettagli come cambiare questo sistema vasta o per utente.

+0

Grazie per un link. Ma l'ho trovato prima di chiederlo :-) Ma il problema è di cambiare parametro senza fermare il processo (in runtime) e per l'intero processo. – wako

+0

@wako: Non può essere eseguito dall'esterno del processo (a meno che tu non stia utilizzando uno dei più recenti kernel di sviluppo, il che è improbabile) – caf

+0

@caf: Grazie. Questo è esattamente ciò che volevo sentire. – wako

6

Vecchio thread, lo so.

È possibile utilizzare gdb, entrare nel processo, chiamare le suddette syscalls per aumentare il limite a cui sei interessato, quindi continuare il lavoro ed uscire da gdb. Ho modificato le cose al volo in questo modo un paio di volte.

L'app non sarebbe inattiva, ma solo congelata per il momento mentre si eseguiva la chiamata. se sei veloce (o lo script!), probabilmente non sarà evidente.

+0

Grazie per il suggerimento! –

+0

+1 Grande suggerimento, [questo post] (http://superuser.com/a/441758/81173) e [questo blog] (http://gregchapple.com/updating-ulimit-on-running-linux-process /) descrive come farlo. –

+0

Sì, questo è un po 'come ritoccare Matrix per far funzionare le cose ... fermare il mondo, modificare una variabile, continuare il mondo ... oh! Già visto! Io sono l'unico! (beh, quando ho gdb!) – lornix

3

Sì, è possibile aumentare i limiti in /proc/<pid>/limits in fase di esecuzione. Basta trovare il PID ed eseguire sotto comando:

echo -n "Max open files=20:20" > /proc/$pid/limits 
+2

Non si sta lavorando su Ubuntu 14.04.2 LTS. –

3
echo -n "Max open files=20:20" > /proc/$pid/limits 

... Lavori in RHEL5.5 e RHEL6.7.

Si noti che "-n" è obbligatorio; una nuova riga finale genererà un reclamo sugli argomenti non validi.

12

Un'altra opzione è utilizzare il comando prlimit (dal pacchetto util-linux). Per esempio, se si desidera impostare il numero massimo di file aperti per un processo:

prlimit -n4096 -p pid_of_process

+0

o debian, o ubuntu, o ... – t2d

+0

Sto usando linux mint (basato su Ubuntu) e non riesco a trovarlo nell'installazione predefinita. Normalmente fa parte del pacchetto util-linux ma eve questo pacchetto su Mint non porta questo comando. – redobot

+0

➜ ~ lsb_release -d Descrizione: \t Ubuntu 16.04.1 LTS ➜ ~ whereis prlimit prlimit:/usr/bin/prlimit /usr/share/man/man2/prlimit.2.gz/usr/share/man/man1/prlimit.1.g – t2d

3

i seguenti comandi danno il massimo # dei file aperti per ogni processo ammessa per default limiti (soft e hard rispettivamente):

ulimit -Sa 
ulimit -Ha 

È possibile utilizzare un programma o un comando per modificare questi limiti. Guarda ulimit (uomo ulimit).

Problemi correlati