Дайте приоритет мыши/клавиатуры/терминала/ctrl-c и остановите программы от замораживания моей системы linux

Да, это широкий вопрос, но я считаю вполне допустимым. Иногда программы и сценарии занимают слишком много времени или используют слишком много памяти и действительно начинают замедлять мою систему. Штраф. Иногда система тормозит так сильно, что я едва могу скользить-показываю мышку к терминалу и спам Ctrl+C. Это сбивает меня с толку, почему ОС не дает приоритета планирования, чтобы позволить пользователю использовать мышь, клавиатуру и убивать вещи. Всегда видимый это?

> ./program
^C^C^C^C^C^C^C^C^C^C^C^Z^Z^Z^C^C^C^C^C^Clsdhafjkasdf

теперь Ctrl+C не так суров, как некоторые другие (он может быть обработан приложением и даже проигнорирован, но здесь это не так). Ctrl+Z будет выполнять работу слишком хорошо, как я мог бы kill -9 %1 сразу после, но это тоже не работает.

другой способ-перейти на виртуальную консоль Ctrl+Alt+F2, войти и убить обидчика приложение, но поскольку система занята это не работает, и я получаю черный экран. Точно так же я не могу открыть новые терминалы (окно всплывает, но не бросает меня в оболочку). Другие открытые терминалы могут не отвечать или не выполнять команды.

Я подозреваю, что одна из причин, по которой система настолько неоперабельна, - это программа-нарушитель, нажимающая своп и выталкивающая больше основных приложений из основной памяти. Даже самая простая команда, чтобы дать мне подсказку bash или выполнить kill, не может получить цикл в edgeways. У меня нет доказательство этому, потому что я не могу бежать top когда это произойдет. есть ли варианты, чтобы повысить шансы оригинала Ctrl+C работает?. Может быть, что-то вроде увеличения приоритета X и терминала или автоматического уничтожения программ, которые используют большую часть памяти или начинают слишком много менять местами?

есть ли какой-либо другой linux-fu, который я мог бы использовать для восстановления контроля, когда это произойдет (например,SysRq команды)?

обновление: после еще нескольких тестов я уверен, что это приложения, использующие слишком много памяти и нажав своп. Даже после убийства приложения, о котором идет речь, другим требуется очень много времени, чтобы начать реагировать, как будто они были вытеснены из основной памяти. я бы очень хотел, чтобы какой-то способ автоматически ограничивать высокие программы использования памяти в основной памяти. Если он попадает своп это будет слишком медленно в любом случае, так какой смысл позволить ему продолжать.

примечание: Я не после решения конкретного приложения и не знаю заранее, когда какая-то операция будет жевать память. Я хочу решить эту проблему в масштабах всей системы. Т. е. многие программы вызывают эту. AFAIK я не возился с конфигурацией системы, и это довольно стандартная установка fedora. Я не удивлен этими замедлениями но я хочу больше контроля.


Я хотел бы, чтобы мой менеджер окон работает, и это мои последние курорты чего я надеюсь избежать. Обычно мне это нужно, только если мой GPU застрял в цикле и блокирует X. если включена, Ctrl+Alt+backspace это удобный ярлык, чтобы убить X и все ваши приложения, принимая вас обратно, чтобы войти. Более мощная команда, опять же если включена, is Alt+SysRq+K. Если это не работает, он держит кнопку питания время.


Alt+SysRq+F (спасибо, @Hastur), который убивает процессы захвата памяти довольно разрушительно, но может помочь в крайнем случае.
Update: не совсем уверен во всех последствиях здесь, но предложение @Xen2050 о ulimit кажется, решить многие проблемы...

TOTAL_PHYSICAL_MEMORY=$(grep MemTotal /proc/meminfo | awk '{print }')
ulimit -Sv $(( $TOTAL_PHYSICAL_MEMORY * 4 / 8))

собираюсь оставить это в моем bashrc и посмотреть, как идут дела.

обновление: вещи в основном кажутся хорошими, за исключением некоторых приложений которые разделяют большие библиотеки и сопоставляют большие файлы. Даже если они потребляют едва ли фактическую память и вряд ли часто попадают в swap. Кажется, что число недостаточно низкое, чтобы убить смертельные приложения для обмена, но оставить обычные (например, 4.6 gb VIRT amarok) работает.

связанные: https://unix.stackexchange.com/questions/134414/how-to-limit-the-total-resources-memory-of-a-process-and-its-children/174894, но все же проблема ограничения приложений в том, что начинайте часто нажимать своп.


это именно то решение, которое я ищу: возможно ли, чтобы убийца OOM вмешался раньше?

8
задан Community
16.12.2022 15:46 Количество просмотров материала 3539
Распечатать страницу

2 ответа

ваш конкретный случай не похож просто на процесс, использующий весь доступный процессор, больше похож на дисплей или, возможно, из оперативной памяти. Ограничение оперативной памяти должно быть возможно с помощью группы или ограничения ulimit / user.

но если вы хотите попробовать ограничить использование процессора некоторыми процессами, это может сработать:

Если вы точно знаете, какой процесс(ы) убегает с вашим процессором, вы можете использовать cpulimit чтобы замедлить его. Я использую его регулярно на низкоприоритетный процесс, который иногда убегает с процессором, работает отлично. Это:

посылает сигналы SIGSTOP и SIGCONT процессу, как проверить, что он может контролировать и ограничить средний объем процессора, который он потребляет. Это может привести к вводящим в заблуждение (раздражающим) сообщениям управления заданием, которые указывают, что задание было остановлен (когда на самом деле это было, но сразу же перезапущен). Этот мочь также вызывают проблемы с интерактивными оболочками, которые обнаруживают или иным образом зависят от SIGSTOP / SIGCONT. Например, вы можете разместить работу на переднем плане, только чтобы увидеть его немедленно остановлен и перезапущен в фоновом режиме. (См. также http://bugs.debian.org/558763.)

есть примеры по запуску его в это man-страницы, как:

   Assuming you have started `foo --bar` and you find out with  top(1)  or
   ps(1) that this process uses all your CPU time you can either

   # cpulimit -e foo -l 50
          limits  the CPU usage of the process by acting on the executable
          program file (note: the argument "--bar" is omitted)

   # cpulimit -p 1234 -l 50
          limits the CPU usage of the process by acting  on  its  PID,  as
          shown by ps(1)

   # cpulimit -P /usr/bin/foo -l 50
          same as -e but uses the absolute path name
1
отвечен Xen2050 2022-12-17 23:34

вы можете установить "xkill" применение и назначение "xkill" в какой-то клавиатуры короткую стрижку, как CTRL+шифт+K и, когда какой-либо скрипт или программа лаги, просто нажмите сочетание клавиш Ctrl+шифт+K и нажмите на приложение вы хотите, чтобы убить. Вот это

0
отвечен Faizan Akram Dar 2022-12-18 01:51

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх