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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top