Sie sollten sich stattdessen /proc/sys/fs/file-max ansehen
Aus der letzten linux/Documentation/sysctl/fs.txt:
Dateimaximum &Dateinummer:
Der Kernel weist Dateihandles dynamisch zu, gibt sie aber noch nicht wieder frei.
Der Wert in file-max bezeichnet die maximale Anzahl von Datei-Handles, die der Linux-Kernel zuweist. Wenn Sie viele Fehlermeldungen erhalten, dass die Datei-Handles zur Neige gehen, sollten Sie dieses Limit erhöhen.
Historisch bezeichneten die drei Werte in file-nr die Anzahl der zugewiesenen Dateihandles, die Anzahl der zugewiesenen, aber unbenutzten Dateihandles und die maximale Anzahl der Dateihandles. Linux 2.6 meldet immer 0 als Anzahl der freien Datei-Handles -- das ist kein Fehler, es bedeutet nur, dass die Anzahl der zugewiesenen Datei-Handles genau mit der Anzahl der verwendeten Datei-Handles übereinstimmt.
Versuche, mehr Dateideskriptoren als file-max zuzuweisen, werden mit printk gemeldet, suchen Sie nach "VFS:file-max limitreached".
BEARBEITEN:Der zugrunde liegende Fehler ist wahrscheinlich nicht das System, dem die globalen Dateideskriptoren ausgehen, sondern nur Ihr Prozess. Wahrscheinlich liegt das Problem in der maximalen Größenbeschränkung von select.
Es sieht nicht so aus, als würden Sie das Systemdatei-Desriptor-Limit erreichen. Siehe diese Antwort.
Vielleicht verwendet Ihr Serverprozess select
und ist somit auf 1024 Deskriptoren beschränkt? Wenn Sie zu einem anderen Mechanismus wechseln, z. poll
Sie sind nicht mehr auf 1024 Deskriptoren beschränkt.
select()
funktioniert mit fd_set
s
Dies ist aus der POSIX-Dokumentation von select.h:
Folgendes soll als Makro definiert werden:
FD_SETSIZE
Maximum number of file descriptors in an fd_set structure.
Versuchen Sie FD_SETSIZE
zu finden oder auszugeben auf Ihrem System.
Wenn Sie feststellen, dass FD_SETSIZE zu niedrig für Sie ist, würde ich lieber versuchen, von select
wegzukommen als zu versuchen, FD_SETSIZE
zu erhöhen was normalerweise schwieriger ist.