Как ограничить использование ресурсов для экономии CPU + RAM для определенного процесса?

У меня есть dev-сервер, на котором sshd иногда перестает работать, потому что у машины заканчивается RAM. Да, мы мало работаем над памятью, и сейчас обновление невозможно. То, что я хочу сделать, – сказать машине: «Делай, что хочешь, но не оставляй 20 МБ и некоторый процессор для sshd !».

Как это можно сделать?

  • Могу ли я ожидать линейного масштабирования с помощью GNU Parallel
  • Время доступа для разных разделов на одном жестком диске
  • Как отслеживать источник всплесков ввода-вывода?
  • Лучший способ зашифровать мою систему на ssd
  • Параметры конфигурации диска, что может повлиять на производительность
  • предупреждение о потреблении памяти
  • Накладные расходы ввода-вывода устройства, зашифрованного dm?
  • Как определить, когда процесс или машина привязаны к IO?
  • 4 Solutions collect form web for “Как ограничить использование ресурсов для экономии CPU + RAM для определенного процесса?”

    Вероятно, вы можете достичь чего-то подобного, используя группы с контроллером ресурсов памяти .

    Я предполагаю, что вы поставили все свои ресурсоемкие задачи в ограниченную (CPU и RAM) cgroup и оставите sshd «снаружи», чтобы он не был ограничен.

    (Однако добавление большего количества подкачки, даже в виде файла подкачки, может быть хорошим вариантом).

    О, но группы легко 🙂 Установите пакет libcgroup. Создайте файл /etc/cgconfig.conf:

     mount { cpu = /cgroup/cpu_and_mem; cpuacct = /cgroup/cpu_and_mem; memory = /cgroup/cpu_and_mem; } group sshd { cpu { cpu.shares="500"; } cpuacct { cpuacct.usage="0"; } memory { memory.limit_in_bytes="1G"; } } group nosshd { cpu { cpu.shares="500"; } cpuacct { cpuacct.usage="0"; } memory { memory.limit_in_bytes="1G"; } } 

    Запустите процесс cgconfig который создаст иерархию, группы и установит ограничения. Если это удастся, у вас есть две группы, каждая из которых имеет 50% назначенного CPU и 1G памяти (не знаю, каков ваш фактический объем доступной памяти, если в этом примере это 2G). Теперь вам просто нужно переместить все задачи (т.е. все процессы, запущенные в системе) из корневой группы в группу nosshd:

     cgroup]# cat tasks >> nosshd/tasks cgroup]# echo > tasks 

    Тогда вам просто нужно получить PID процесса sshd и перенести его в файл задач sshd:

     cgroup]# echo $PID >> sshd/tasks 

    Та-да, все готово. Теперь вы можете быть уверены, что у sshd всегда будет 50% CPU и 1G памяти.

    Используйте renice для получения более высокого приоритета для sshd или проверки бухгалтерии. (acct) -> с этим вы можете установить ресурсы для пользователей, поэтому запустите sshd с s

    Более общее решение проблемы использования ресурсов приложения – запуск ваших приложений в контейнере с помощью Docker . Затем вы можете запускать контейнеры с ограничениями использования ЦП и памяти, аналогичными группам.

     docker run -c=10 -m=1g my-container 
    Interesting Posts

    Как загрузчик и ядро ​​взаимодействуют после загрузки ядра в память?

    Что такое Unix сейчас?

    Найти правильные настройки tty & tty

    Как остановить проверку файловой системы (fsck) при загрузке?

    Почему «touch -a» также устанавливает ctime?

    Какова таблица маршрутизации по умолчанию для Linux?

    Почему моя SD-карта не распознается?

    Отправить «ввести ключ» в скрипт python из bash

    Исходный каталог Apache redirect 301 не работает

    повторное использование последнего вывода команды с заданным индексом / строкой-номером

    Аккумулятор не обнаружен на моем встроенном устройстве при перезагрузке

    Может ли udev инициировать действие только на монте?

    Как создать резервную копию всего установленного программного обеспечения / пакетов в AIX?

    Почему Wingpanel-Slim не работает в Elementary Luna после установки и активации?

    Необходимы ли котировки для назначения локальной переменной?

    Linux и Unix - лучшая ОС в мире.