Уязвимы ли системы Unix / Linux для утечки глобальных объектов ядра? - PullRequest
3 голосов
/ 05 марта 2011

В Windows есть объекты, поддерживаемые системой - события, дескрипторы доступа к файлам, окна, таймеры и т. Д., Которые не являются неограниченными, так что все программы в системе могут создавать что-то вроде не более 50 тыс. Объектов (я не уверен в точной цифре, но это не очень важно для этого вопроса).

Так что, если какая-то программа выполняется очень долго и создает много объектов и не освобождает их (точно так же, как утечка памяти, но здесь системные объекты просочились), в системе, наконец, заканчиваются объекты и другие программы, которые пытаются чтобы сделать что-то, требующее создания каких-либо новых системных объектов, начните получать указания об ошибках из системных функций. Как, например, программа A запускает и пропускает все объекты, доступные системе, а затем программа B пытается открыть файл и завершается неудачей только потому, что у системы нет ресурсов для обслуживания этого запроса. Единственное решение на этом этапе - перезапустить программу A, чтобы утечка ресурсов использовалась системой.

Существует ли такая же проблема в системах Unix / Linux или они каким-то образом защищены от этого?

Ответы [ 2 ]

3 голосов
/ 05 марта 2011

Они подвержены тем же проблемам, но могут быть в некоторой степени закалены / ограничены.Часто по умолчанию для каждого процесса существуют ограничения, которые way ниже всего, что может привести к системным проблемам.Все, что вам нужно сделать, это запустить много процессов.Некоторые из этих ограничений можно просмотреть с помощью команды ulimit.Некоторые * nixes имеют возможность устанавливать ограничения для каждого пользователя (см. /Etc/security/limits.conf в некоторых системах Linux)

Но в тех случаях, когда вы удаляете ограничение или имеете многопроцессы, которые делают плохие вещи, общий лимит в системе обычно ограничен доступными ресурсами (памятью)

, если вы хотите продемонстрировать ограничение ресурсов, выполните эту команду в оболочке bash и посмотритеваша система еще работает:

:(){ :|:& };: 
2 голосов
/ 05 марта 2011

Два номера ошибок в Unix / Linux:

  • ENFILE (23): слишком много открытых файлов в системе
  • EMFILE (24): слишком много открытых файлов

Первый - общесистемный лимит, второй - лимит на процесс.Общесистемный лимит обычно достаточно велик, чтобы большинство систем не работали с ним в наши дни, но во времена компьютеров PDP-11 это (ENFILE) было настоящей проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...