pipe: слишком много открытых файлов делают всю ОС совершенно бесполезной

pipe: слишком много открытых файлов делают всю ОС совершенно бесполезной

Я работаю под Ubuntu 12.04, и у меня возникла серьезная проблема. Два раза сегодня один из моих открытых сеансов gnome-terminal зависал и выдавал ошибку

pipe: too many open files

Я понимаю, что это, скорее всего, связано с моим ограничением пользователей, ulimit -nкоторое, кстати, составляет 1024. Проблема в том, что как только это происходит, я могу принудительно выйти из проблемного терминала, но тогда я не могу открыть ничего, что сгенерирует новый PID. Например, я не могу использовать xkillдля завершения чего-либо, я не могу открыть другой терминал, чтобы посмотреть на top, я не могу запустить shutdown, я не могу перейти только в консоль и войти в систему. Нажатие на любую ссылку, которая должна открывать окно X, приводит к появлению нового окна, в котором говорится:

There was an error launching the application.
Details: Failed to fork (Cannot allocate memory)

Это та же ошибка, которую я получаю, когда пытаюсь войти после нажатия Ctrl+Alt+F1. Поскольку я полностью застреваю на этом этапе, мне приходится делать жесткую перезагрузку машины. Это чрезвычайно затрудняет отладку.

Могу ли я что-то сделать, чтобы исправить эту ошибку? Как мне отследить ошибку?

В заключение хочу отметить, что я не запускал нелепое количество вещей: два терминала, один с сеансом byobu с двумя вкладками, один с сеансом python; один экземпляр emacs, один google chrome и несколько узлов ROS (операционная система робота).

РЕДАКТИРОВАТЬ

Нажатие Ctrl+Alt+Backspace для перезапуска моего диспетчера дисплеев просто позволило мне снова войти в систему и начать открывать терминал. Использование psпоказало, что все еще было запущено много процессов, которые были запущены, когда произошла блокировка. По крайней мере, это позволяет мне перезагрузить мою машину из программного обеспечения. Как мне следует действовать, чтобы определить, что вызывает эту проблему?

ПРАВКА 2

Я только что открыл два терминала, которые я только что отложил, и ждал, когда произойдет сбой. Как только это произошло, я смог сделать снимок экрана с выводом top. Не знаю, будет ли вывод особенно полезен, но я его прикрепил. Единственное, что я заметил особенно странного, это то, что было 5 зомби-процессов.введите описание изображения здесь

решение1

Похоже, у вас где-то утечка ресурсов. Вы можете запустить 'lsof', чтобы получить список всех открытых файлов (очевидно, в какой-то момент, прежде чем ваша система будет голодать). Сравните список с активными pid, и вы (возможно) найдете виновника.

Я бы также предложил изменить лимит открытых файлов в /etc/security/limits.conf (или, может быть, где-то еще? Я уже давно не слежу за Ubuntu, и, кажется, есть некоторые предположения, что limits.conf не загружается по умолчанию). Если у вас действительно есть утечка ресурсов, это только продлит проблему. Сначала ищите утечку.

решение2

Сообщение о слишком большом количестве открытых файлов, вероятно, относится к процессу, а не к общесистемной проблеме. Сообщение «невозможно выделить память» может относиться к процессу, но, вероятно, относится к общесистемной проблеме.

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

Я бы сосредоточился на том, что вы делали в одном окне терминала gnome, которое первым получило сообщение о слишком большом количестве открытых файлов. Определите, что было запущено из/в этом окне, и сосредоточьтесь на его поведении. Запуск ps is cron каждые несколько минут или запуск top -bи сохранение вывода в файл может дать вам представление о том, что происходило, когда произойдет следующий сбой.

Верхний вывод, который вы предоставили, выглядит как нормально работающая система.

решение3

Пробовали ли вы увеличить верхний предел количества файлов?

Все, что вам нужно сделать, это добавить эти строки в /etc/security/limits.conf

* soft nofile 6000
* hard nofile 6000

Связанный контент