1

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

pipe: too many open files

Я понимаю, что это, вероятно, связано с моим лимитом пользователя, показанным с помощью ulimit -n который, кстати, равен 1024. Проблема в том, что, как только это произойдет, я могу принудительно завершить работу терминала, вызывающего сбой, но тогда я не смогу открыть ничего, что сгенерирует новый PID. Например, я не могу использовать xkill чтобы убить что-либо, я не могу открыть другой терминал, чтобы посмотреть сверху, я не могу запустить 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 процессов зомби.

2 ответа2

2

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

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

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .