Linux Posix Queues Открыто слишком много файлов

0

В моем приложении у меня есть разные модули, которые общаются через posix-очереди, проблема в том, что Im получает вышеупомянутую ошибку при достижении предела, я установил предел в обоих

sysctl fs.file-max = new_value 

а также

ulimit -n 

но это некоторая жестко закодированная ценность, есть ли какая-либо передовая практика для преодоления этого? Я попытался закрыть дескрипторы mq_close но затем все модули в приложении могут использовать любое сообщение в любое время. Поэтому я не могу закрыть все дескрипторы.

  • 2
    Вы, вероятно, не достигаете общего предела дескриптора файла, но ограничивает количество очередей сообщений, условие, которое также будет возвращать ENFILE. Вы задали вопрос об этом на днях. Вы увеличили количество разрешенных MQ?
  • 0
    да, я сделал, как было предложено, но все еще получая ошибку, я ищу обходной путь для этого.
Показать ещё 4 комментария
Теги:
posix

1 ответ

1
Лучший ответ

Существует два типа ограничений ресурсов в linux/UNIX Soft limit & Hard limit. Максимальные дескрипторы, которые вы можете установить, соответствуют жесткому пределу. Есть способы увеличить жесткий предел, но, честно говоря, я никогда не пробовал так, и я бы не рекомендовал это по двум причинам:

  1. Открытие слишком большого количества дескрипторов одновременно замедляет работу вашей программы.
  2. Это даже не требуется для увеличения жесткого ограничения, поскольку, если вы закроете неиспользуемые дескрипторы правильно в своей программе, вы сами убедитесь, что это даже не требуется. Представьте, что веб-сервер, который открывает новый дескриптор для каждого нового запроса, также не требует увеличения жесткого ограничения.

Наконец, я бы порекомендовал вам даже увеличить мягкий лимит, используя функцию setrlimit из вашей программы, поскольку увеличение ограничения на оболочку является временным, и если вы установите его в профиле, это увеличит предел для всех программ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню