Ответ
Да, в Linux можно выделить и ограничить ресурсы для процесса. Это ключевая практика в DevOps для управления нагрузкой и обеспечения стабильности системы. Основные механизмы:
1. cgroups (control groups) Ядро Linux позволяет создавать группы процессов и распределять между ними ресурсы (CPU, память, I/O). Это основа для контейнеризации (Docker, Kubernetes).
Пример создания cgroup для ограничения CPU:
# Создаем cgroup для CPU
sudo mkdir /sys/fs/cgroup/cpu/myapp
sudo echo 100000 > /sys/fs/cgroup/cpu/myapp/cpu.cfs_quota_us # Ограничение до 10% одного ядра
# Запускаем процесс в этой cgroup
sudo echo $$ > /sys/fs/cgroup/cpu/myapp/cgroup.procs
./my_program
2. Утилиты для ограничения ресурсов:
systemd-run— удобная обертка над cgroups для запуска процессов с лимитами.# Запуск с ограничением памяти и CPU systemd-run --scope -p MemoryLimit=500M -p CPUQuota=50% ./my_programcpulimit— для ограничения использования CPU в процентах.cpulimit -l 30 -p $(pgrep my_program)ulimit— встроенная команда shell для ограничений процесса (открытые файлы, стек и т.д.).ulimit -n 1024 # Макс. количество открытых файловых дескрипторов ulimit -s 8192 # Макс. размер стека (KB)
3. Контейнеры (Docker): Docker использует cgroups под капотом. Лимиты задаются при запуске:
docker run --cpus="0.5" --memory="512m" --memory-swap="1g" my_image
В продакшене такие ограничения задаются через оркестраторы (Kubernetes resources.limits) или конфигурацию systemd-сервисов.