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

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

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

  • Различия в производительности между трубопроводами и замещением процессов
  • предупреждение о потреблении памяти
  • Как отслеживать источник всплесков ввода-вывода?
  • Более низкая производительность процессора в Linux
  • Как мы можем измерить накладные расходы на производительность, возникающие в результате записи в файлы или папки?
  • Как настроить группы для правильного обмена ресурсами между пользователями?
  • Есть ли интерфейс linux для доступа к регистру cp15?
  • почему iozone не генерирует выходной файл?
  • 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 
    Linux и Unix - лучшая ОС в мире.