Aumentare il numero di descrittori di file in Linux
-
19-09-2019 - |
Domanda
Ho un processo in esecuzione lunga che controlla il sistema e stampa i log periodiche. Se ho lasciato correre per più di 10-15 minuti, esce con un messaggio che dice: Troppi file aperti.
Il programma è impostato nel formato Real timer_create tempo () e timer_settime (), che sollevano un SIGUSR1 ogni 2 secondi. Nel gestore, v'è un fork () - exec () nel bambino c'è un'attesa di genitore e successiva mmap () e le operazioni di flusso su / proc / acpi / batteria / Stato e / sys / devices / system / cpu / CPU0 / cpufreq / scaling_cur_freq e file scaling_setspeed. Ho preso cura di chiudere i puntatori * flusso di file nel gestore segnale periodico e in tutti gli altri luoghi. Ho anche assicurato munmap () di tutti i file mappati.
Come posso ottenere intorno a questo? Devo aumentare i descrittori di file massimo consentito o dovrei aumentare i file aperti massimi indicati da ulimit -AS? Perché questo accada se sto chiudendo tutti i file * usando fclose ()?
Qui sono i valori per il mio sistema fin d'ora:
#cat /proc/sys/fs/file-max
152808
#ulimit -aS
.
.
.
.
open files (-n) 1024
Soluzione
Usare lsof o un debugger per trovare quali file il processo ha aperto. Aumentando il limite sarà solo ritardare il punto in cui si esegue fuori di descrittori.