Как предотвратить так много случаев запуска apt-check?
18
У меня есть сервер Ubuntu 12.04, который только что вышел из строя по очень очевидной причине: более 30 apt-checkпроцессов, занимающих всю память, включается убийца OOM, убивая жизненно важные службы. Я не уверен, откуда apt-checkберутся процессы, но я предполагаю, что мои плагины Nagios / Icinga check_aptмогли бы использовать его, а также byobuстрока состояния может захотеть отобразить его вывод. Я предполагаю, что что-то заблокировано, и все процессы просто ждали, но держали память.
Как я могу предотвратить создание такого количества экземпляров apt-checkв системе? Это не имеет смысла для меня, и он должен просто выйти, как только он не может получить блокировку чтения в базе данных dpkg.
Кажется, я не единственный, у кого здесь проблемы. Все предложения apt-checkдовольно негативны:
(чистый браузер, не авторизован, нет персонального поиска)
Некоторые из них apt-checkдали мне понять, что это очень тупой сценарий, который нужно исправить. При всем моем уважении к авторам, он не работает на моих серверах. Вот мои мысли:
Сочетание последних двух позволяет ему бесконечно накапливаться по спирали вниз. Если система используется для каких-то других целей с более высоким приоритетом, количество процессов просто возрастет, и этому нет конца, так как apt-checkон никогда не получит никакого приоритета над ней. Проблемы только усугубятся, когда убийца OOM решит убить ваши жизненно важные системные процессы.
Если бы любой из этих двух аспектов в поведении отличался, это не позволило бы системе оказаться в таком нарушенном состоянии, как я полагаю.
Хотя строки верны в том, что родительские процессы также несут за это ответственность, я полагаю, что нижеуказанные пункты являются недостатками apt-checkи должны быть указаны как ошибка для правильного решения:
он должен выйти, если для получения фрагментов информации требуется неоправданно много времени
На самом деле, похоже, что Linux OOM Killer делает некоторую эвристику по этому поводу. Замкнутые процессы получат повышенную оценку, а длительные процессы уменьшатся. ( источник - спасибо Ульриху Дангелю за указание на это )
Возможное решение, которое я могу предложить:
кешировать результаты после обработки
выходной кеш, если количество секунд меньше N без загрузки всех библиотек Python-APT для каждого простого (четного --help) вызова.
сделать настраиваемый красивый уровень - позвольте мне изменить / отключить это, пожалуйста! Я считаю, что установка его на 0 на самом деле поможет
Я думаю, что вы пропустили самое важное, что нужно сделать: использовать файл блокировки и не позволять запускать более одного экземпляра одновременно.
Дероберт
@derobert Это скрипт, который может запускать любой пользователь без особых привилегий в Ubuntu, а не демон. Или я могу безопасно использовать /var/run/ /tmpдля этого доступного для записи / записи файла блокировки? Большая дыра: добавьте файл блокировки, и администратор не будет уведомлен об обновлениях системы!
gertvdijk
Все, что запускается автоматически (в результате запускается более 30 копий), должно блокировать. Или он может сделать это сам, для каждого пользователя. В любом случае, это ошибка, которую нужно устранить.
Дероберт
Кажется, Нагиос / Исинга избегает ловушки. По крайней мере, у него был тайм-аут около 10 секунд, и он предупреждал, если он превышен. (Хотя я не могу найти, как настроить время ожидания - я бы предпочел больше). Byobu на Debian - это то, что вызвало проблему для меня; в Ubuntu это должно быть исправлено .
sourcejedi
4
Вам необходимо выяснить, какой процесс порождает apt-check. Вы можете использовать что-то вроде ps, чтобы получить дерево процессов.
ps -A --forest
Если у apt-check нет родителей, то это может быть проблема с apt-check как таковой, а не одной конкретной программой. если это так, я бы попытался отладить apt-check.
Благодарю. Дали мне несколько идей, чтобы заглянуть дальше. Тем не менее, это заставило меня поверить, что это apt-checkдействительно проблема - см. Мой собственный ответ .
gertvdijk
Если он потребляет память и процессорное время, это не зомби.
Жиль "ТАК - перестань быть злым"
@ Жиль хороший момент.
струнные
0
Письменная база по Ubuntu 12.04
У меня та же проблема, и я обнаружил, что из-за того byobu, что если я просто запустил apt-get updateбез использования byobu, не будет никакого check-aptпроцесса. Кроме того , оно относится к update-notifierпакету, когда я удалил эти пакеты (обновление-notifer-Коммон, обновление-уведомитель), используя byobuи бежать apt-get update, он побежал другую команду , но совершенно та же память с помощью: apt-get -s -o Debug::NoLocking=true upgrade.
Некоторые другие вещи могут работать apt-get update(но, вероятно, не работают check-apt)
передача аргумента для check_aptобновления / обновления pkg.
Заключение:
byobuловит событие, когда вы запускаете apt-get updateи запускаете эти check-aptпроцессы, переконфигурируйте строку состояния byobuили исправьте это.
/var/run
//tmp
для этого доступного для записи / записи файла блокировки? Большая дыра: добавьте файл блокировки, и администратор не будет уведомлен об обновлениях системы!Вам необходимо выяснить, какой процесс порождает apt-check. Вы можете использовать что-то вроде ps, чтобы получить дерево процессов.
Если у apt-check нет родителей, то это может быть проблема с apt-check как таковой, а не одной конкретной программой. если это так, я бы попытался отладить apt-check.
источник
apt-check
действительно проблема - см. Мой собственный ответ .Письменная база по Ubuntu 12.04
У меня та же проблема, и я обнаружил, что из-за того
byobu
, что если я просто запустилapt-get update
без использованияbyobu
, не будет никакогоcheck-apt
процесса. Кроме того , оно относится кupdate-notifier
пакету, когда я удалил эти пакеты (обновление-notifer-Коммон, обновление-уведомитель), используяbyobu
и бежатьapt-get update
, он побежал другую команду , но совершенно та же память с помощью:apt-get -s -o Debug::NoLocking=true upgrade
.Некоторые другие вещи могут работать
apt-get update
(но, вероятно, не работаютcheck-apt
)check_apt
обновления / обновления pkg./etc/cron.daily/apt
может также обновить список пакетов (см. https://help.ubuntu.com/lts/serverguide/automatic-updates.html ), но он запускается один раз в день и не должен вызывать проблем.На рабочем столе может быть больше вещей.
Заключение:
byobu
ловит событие, когда вы запускаетеapt-get update
и запускаете этиcheck-apt
процессы, переконфигурируйте строку состоянияbyobu
или исправьте это.источник