Разница между Linux errno 23 и Linux errno 24

  1. в чем разница между этими 2 ошибками linux в errno.h? 23 и 24

    Я пробовал 2 разных сайта, но не могу понять разницу между ними.


    [EMFILE]
    Too many open files.
    [ENFILE]
    Too many files open in system.
    

    # define ENFILE      23  /* File table overflow */
    # define EMFILE      24  /* Too many open files */
    

  2. кроме того, я получаю ошибки 24 и гнездо вызвать ошибки во время 974th. (AF_INET гнездо дейтаграммы UDP)

    когда я cat /proc/sys/fs/file-max Я вижу значение 334076 ulimit-n показывает 1024

    любую идею что можно сделать для увеличения лимита?

2 ответов


For 1) оба кода ошибок касаются ситуации со слишком большим количеством открытых файлов. EMFILE слишком много открытых файлов на процесс. ENFILE слишком много файлов, открытых во всей системе.


вы можете увеличить максимальное количество открытых файлов / файловых дескрипторов

sysctl -w fs.file-max=100000

или открыть

/etc/sysctl.conf

и добавить / изменить fs.файл-max на номер, который вам нужен:

fs.file-max = 100000

затем запустите

sysctl -p

перезагрузить новые настройки

если вы не хотите устанавливать общесистемные ограничения FD (файловый дескриптор), вы можете установить ограничения FD на уровне пользователя.

вам нужно отредактировать /etc/security/limits.conf file

и для пользователя YOUR_USER, добавить эти строки:

YOUR_USER soft nofile 4096
YOUR_USER hard nofile 10240

чтобы установить мягкие и жесткие ограничения для пользователя YOUR_USER.
Сохраните и закройте файл.

чтобы увидеть жесткие и мягкие ограничения для пользователя YOUR_USER:

su - YOUR_USER

ulimit -Hn
ulimit -Sn