Ответ
В DevOps-окружениях лимиты процессов критически важны для предотвращения fork-бомб и обеспечения стабильности.
1. Проверка текущих лимитов
# Лимит процессов для текущей сессии
ulimit -u
# Все лимиты для текущего пользователя
ulimit -a
# Лимиты для конкретного процесса (через /proc)
cat /proc/$(pgrep nginx | head -1)/limits | grep processes
# Лимиты для пользователя по UID
cat /proc/$(id -u appuser)/limits 2>/dev/null | grep processes
2. Проверка системных настроек
# Глобальный максимум (ядерный параметр)
sysctl kernel.pid_max
# Проверка настроек PAM limits
cat /etc/security/limits.conf | grep -v "^#" | grep -v "^$"
ls -la /etc/security/limits.d/
# Для systemd-сервисов
systemctl show nginx.service | grep LimitNPROC
3. Настройка лимитов
Временное изменение (до перезагрузки):
# Для текущей сессии
ulimit -u 2048
# Глобальный максимум процессов в системе
sudo sysctl -w kernel.pid_max=65536
Постоянное изменение:
# 1. В /etc/security/limits.conf
appuser hard nproc 1024
appuser soft nproc 512
* hard nproc 4096 # для всех пользователей
# 2. Для systemd-сервисов (в юните или override)
sudo systemctl edit nginx.service
# Добавить:
[Service]
LimitNPROC=1024
TasksMax=80%
4. Мониторинг использования
# Количество процессов по пользователям
ps hax -o user | sort | uniq -c | sort -rn
# Скрипт для алертинга
#!/bin/bash
MAX_PROCS=1000
for user in $(ps haxo user | sort -u); do
count=$(ps -u $user --no-headers | wc -l)
if [ $count -gt $MAX_PROCS ]; then
echo "ALERT: User $user has $count processes (limit: $MAX_PROCS)"
fi
done
DevOps-контекст:
- Контейнеры: в Docker
--pids-limit, в Kubernetespod.spec.containers[].resources.limits.pids - Оркестрация: настройка лимитов через инфраструктуру как код (Terraform, Ansible)
- Алертинг: интеграция с Prometheus через node_exporter или custom scripts