Кнопка для установки всех процессов на удержание для Linux?
Когда Linux начинает меняться, вы в основном обречены. Очень скоро система больше не будет реагировать на любые входные данные, но радостно включится до конца дней...
Можете ли вы придумать команду, которая содержит все процессы, что позволяет (и в то же время) позволяет вам открыть чистую оболочку, где вы можете исследовать источник проблемы и уничтожить процесс, который израсходовал всю память? (Полагаю, это будет непросто, поскольку, поскольку память, вероятно, полностью заполнена, вам потребуется выгрузить еще немного памяти, чтобы собрать место для открытия оболочки, с другой стороны, все остальные процессы обмена должны быть остановлены.)
Если вы привязали такую команду к горячей клавише, то, возможно, вы сможете использовать ее в качестве аварийной кнопки, что сэкономит вам много времени. Есть идеи, если это вообще возможно? Кто-нибудь пробовал что-то подобное раньше? Если бы кто-то мог понять это, это было бы крутой особенностью:)
5 ответов
Magic SysReq, как уже упоминалось в других ответах, - это действительно все, что у вас есть. Если у вас есть только SSH-доступ, вы можете запустить SysReq следующим образом:
# Enable Magic SysReq since most systems default this off
echo 1 > /proc/sys/kernel/sysrq
#call OOM Killer to try to free up memory
echo f > /proc/sysrq-trigger
Создание из этого исполняемого скрипта и его выполнение, как только вы заметите, что обмен может дать вам шанс. Отключение подкачки также возможно, если у вас достаточно памяти для обработки временных всплесков памяти, или если у вас все в порядке с уничтожением случайных программ при нехватке памяти.
В связи с этим, если у вас есть удаленная система с ракетной нагрузкой, и вам нужно убить ее до смерти, вы можете использовать это для принудительной перезагрузки без чистого выключения:
echo 1 > /proc/sys/kernel/sysrq
#Trigger BIOS reset
echo b > /proc/sysrq-trigger
Одно (неоптимальное!) Решение - обеспечить меньший объем свопов.
Идея состоит в том, что примерно в то время, когда вы в отчаянии вскидываете руки, начинает действовать OOM Killer.
обсуждение
Мой опыт использования Linux на машине с ограниченной памятью говорит о том, что
Для интерактивного использования
- Графический интерфейс подойдет для использования оперативной памяти до 100%.
- Использование от 100 до 150% оперативной памяти работает довольно хорошо, хотя вы можете столкнуться с некоторой задержкой командной строки
- использование от 150 до 175–200% оперативной памяти является медленным, но достаточно быстрым, чтобы вы могли взаимодействовать в командной строке и разумно убивать ненужные вещи.
- Кроме того, даже с терпением почти безнадежно исправить это вручную.
Некоторые особые случаи позволят вам расширить эти ограничения. Большие, но редко активные фоновые процессы будут "сидеть" в памяти, но станут активными лишь изредка, поэтому они не сильно влияют на удобство использования.
В любом случае, план состоит в том, чтобы настроить доступный своп так, чтобы, как только машина была настолько занята, вы не могли разумно убивать вещи вручную, запускается убийца OOM.
Это не оптимально (несмотря на множество эвристик, доступных для убийцы OOM), трудно быть уверенным, что он выберет "правильно".
Magic SysRq - самая близкая вещь к твоей кнопке, которую я знаю...
Вы также можете попробовать с nice -20 bash
и вы должны получить отзывчивую оболочку...
Никогда не пробовал это!, но возможно:
killall -SIGSTOP <main commands>
Увидеть man killall
чтобы увидеть, как вы можете адаптировать его к вашим потребностям. В общем, вы можете захотеть запустить процесс с помощью ulimit, чтобы держать их под контролем, и отслеживать использование памяти с помощью чего-то вроде Nagios (см. Вопросы о том, что альтернативы можно найти в gazillion "Что за мониторинг...").