Vuoi invece guardare /proc/sys/fs/file-max
Dal recente linux/Documentation/sysctl/fs.txt:
file-max &file-nr:
Il kernel alloca gli handle di file dinamicamente, ma ancora non li libera di nuovo.
Il valore in file-max denota il numero massimo di file-handle che il kernel Linux allocherà. Quando ricevi molti messaggi di errore sull'esaurimento degli handle di file, potresti voler aumentare questo limite.
Storicamente, i tre valori in file-nr indicavano il numero di file handle allocati, il numero di file handle allocati ma non utilizzati e il numero massimo di file handle. Linux 2.6 riporta sempre 0 come numero di handle di file liberi -- questo non è un errore, significa solo che il numero di handle di file assegnati corrisponde esattamente al numero di handle di file usati.
I tentativi di allocare più descrittori di file rispetto a file-max vengono segnalati con printk, cerca "VFS:file-max limitreached".
EDIT:l'errore sottostante probabilmente non è il sistema che esaurisce i descrittori di file globali, ma solo il tuo processo. Sembra probabile che il problema sia il limite massimo di dimensioni di select.
Non sembra che tu stia raggiungendo il limite del descrittore di file di sistema. Vedi questa risposta.
Forse il processo del tuo server utilizza select
ed è quindi limitato a 1024 descrittori? Se passi a un altro meccanismo, ad es. poll
non sarai più limitato a 1024 descrittori.
select()
funziona con fd_set
s
Questo proviene dalla documentazione POSIX di select.h:
Quanto segue deve essere definito come una macro:
FD_SETSIZE
Maximum number of file descriptors in an fd_set structure.
Prova a trovare o emettere FD_SETSIZE
sul tuo sistema.
Se ritieni che FD_SETSIZE sia troppo basso per te, preferirei provare ad allontanarmi da select
piuttosto che cercare di aumentare FD_SETSIZE
che in genere è più difficile.