Místo toho se chcete podívat na /proc/sys/fs/file-max
Z nedávného linux/Documentation/sysctl/fs.txt:
file-max &file-nr:
Jádro přiděluje ovladače souborů dynamicky, ale zatím je znovu neuvolňuje.
Hodnota v file-max označuje maximální počet file-handles, které linuxové jádro alokuje. Když se vám zobrazí spousta chybových zpráv o vyčerpání popisovačů souborů, možná budete chtít tento limit zvýšit.
Historicky tři hodnoty v file-nr označovaly počet alokovaných popisovačů souborů, počet přidělených, ale nepoužitých popisovačů souborů a maximální počet popisovačů souborů. Linux 2.6 vždy hlásí 0 jako počet volných popisovačů souborů -- to není chyba, pouze to znamená, že počet přidělených popisovačů souborů přesně odpovídá počtu použitých popisovačů souborů.
Pokusy o alokaci více deskriptorů souborů než file-max jsou hlášeny pomocí printk, hledejte "VFS:file-max limitreached".
EDIT:základní chybou pravděpodobně není, že systému docházejí globální deskriptory souborů, ale pouze váš proces. Zdá se pravděpodobné, že problémem je limit maximální velikosti výběru.
Nezdá se, že byste dosáhli limitu deskriptorů systémových souborů. Viz tato odpověď.
Možná váš proces serveru používá select
a je tedy omezen na 1024 deskriptorů? Pokud přepnete na jiný mechanismus, např. poll
již nebudete omezeni na 1024 deskriptorů.
select()
pracuje s fd_set
s
Toto je z POSIX dokumentace select.h:
Jako makro je třeba definovat následující:
FD_SETSIZE
Maximum number of file descriptors in an fd_set structure.
Zkuste najít nebo vypsat FD_SETSIZE
ve vašem systému.
Pokud zjistíte, že FD_SETSIZE je pro vás příliš nízké, raději bych zkusil přejít od select
než se snažit zvýšit FD_SETSIZE
což je obvykle těžší.