Vous voulez regarder /proc/sys/fs/file-max à la place
À partir de linux/Documentation/sysctl/fs.txt récent :
fichier-max &fichier-nr :
Le noyau alloue dynamiquement les descripteurs de fichiers, mais pour l'instant il ne les libère pas à nouveau.
La valeur dans file-max indique le nombre maximum de descripteurs de fichiers que le noyau Linux allouera. Lorsque vous recevez de nombreux messages d'erreur concernant le manque de descripteurs de fichiers, vous pouvez augmenter cette limite.
Historiquement, les trois valeurs de file-nr dénotaient le nombre de descripteurs de fichiers alloués, le nombre de descripteurs de fichiers alloués mais inutilisés et le nombre maximum de descripteurs de fichiers. Linux 2.6 signale toujours 0 comme nombre de descripteurs de fichiers libres -- ce n'est pas une erreur, cela signifie simplement que le nombre de descripteurs de fichiers alloués correspond exactement au nombre de descripteurs de fichiers utilisés.
Les tentatives d'allouer plus de descripteurs de fichiers que file-max sont signalées avec printk, recherchez "VFS :file-max limitreached".
EDIT :l'erreur sous-jacente n'est probablement pas le système à court de descripteurs de fichiers globaux, mais simplement votre processus. Il semble probable que le problème soit la limite de taille maximale de select.
Il ne semble pas que vous atteigniez la limite du descripteur de fichier système. Voir cette réponse.
Peut-être que votre processus serveur utilise select
et est donc limité à 1024 descripteurs ? Si vous passez à un autre mécanisme, par ex. poll
vous ne serez plus limité à 1024 descripteurs.
select()
fonctionne avec fd_set
s
Ceci provient de la documentation POSIX de select.h :
Les éléments suivants doivent être définis en tant que macro :
FD_SETSIZE
Maximum number of file descriptors in an fd_set structure.
Essayez de trouver ou de sortir FD_SETSIZE
sur votre système.
Si vous trouvez que FD_SETSIZE est trop bas pour vous, je préfère essayer de m'éloigner de select
que d'essayer d'augmenter FD_SETSIZE
ce qui est généralement plus difficile.