Процесс группировки в Linux
Недавно я видел несколько скринкастов об управлении процессами с systemd
а также cgroups
и меня немного смущает различие между:
а) сервисы: в типичной терминологии linux, где сервис может включать более одного процесса; как сгруппированы процессы, принадлежащие одному и тому же сервису? по какой конвенции?
б) группы процессов: типичная группировка процессов в соответствии со стандартом POSIX
в) ломтики: концепция, используемая systemd
группировать службы (и области) для распределения / ограничения ресурсов (среди прочих)
2 ответа
Позвольте мне попытаться уточнить, так как кажется, что вы смешиваете разные термины.
Группы процессов Эта терминология не используется в cgroups, вы можете ссылаться на "контрольную группу", которая в основном является аббревиатурой для cgroup. Я заметил, что несколько веб-сайтов неправомерно используют группы процессов, когда они на самом деле означают контрольные группы.
Cgroups использует следующую терминологию: кусочки, области, службы
Срезы Это типы блоков для создания иерархии cgroup для управления ресурсами. По умолчанию есть три среза: * system (по умолчанию содержит процесс загрузки) * User (по умолчанию содержит сеансы пользователя) * machine (по умолчанию создан, но не используется и оставлен для использования виртуальной средой)
Область действия Организационная единица, которая группирует рабочие процессы демона. Вы можете смотреть на это как на "кусочки внутри среза".
Сервисы Процесс или группа процессов, контролируемых systemd. В основном процесс, которым вы управляете (остановка / запуск / состояние) через systemctl.
Вы можете рассматривать ломтики как "cgroups системный путь". По умолчанию каждый сервис имеет свой собственный фрагмент (используйте systemd-cgls
распечатать их), а внутри файла модуля вы можете настраивать ресурсы, разрешенные для этого конкретного модуля, например, если я печатаю состояние экземпляра nginx:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2015-01-27 19:41:23 EST; 22h ago
Main PID: 495 (nginx)
CGroup: /system.slice/nginx.service
├─495 nginx: master process /usr/bin/nginx -g pid /run/nginx.pid; error_log stderr;
└─496 nginx: worker process
Вы можете увидеть соответствующую группу или использование "среза" этим сервисом.
чтобы настраивать управление ресурсами, нужно добавить что-то вроде
[Slice]
CPUShares=512
MemoryLimit=2G
Внутренний блок вышел из строя, тогда systemctl daemon-reload && systemctl restart nginx
Вы также можете комбинировать срезы для создания "массива сервисов" (спросите, хотите ли вы узнать об этом больше), который будет использовать определенный лимит ресурсов. Это единица.slice https://www.freedesktop.org/software/systemd/man/systemd.slice.html. По сути, вы создаете модуль.slice, затем запускаете + включаете его и говорите другому сервису использовать этот слайс внутри части "слайса" сервисного блока.
Кроме того, дополнительная информация о настройке ресурсов управления: https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html
Редактировать:
Добавление этих ограничений ресурсов ограничит ресурсы, используемые вашей службой nginx, и сохранит ваши другие службы в безопасности, если nignx сходит с ума из-за DDOS или чего-то еще.