Как узнать и настроить максимальное количество процессов для пользователя в Linux?

«Как узнать и настроить максимальное количество процессов для пользователя в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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, в Kubernetes pod.spec.containers[].resources.limits.pids
  • Оркестрация: настройка лимитов через инфраструктуру как код (Terraform, Ansible)
  • Алертинг: интеграция с Prometheus через node_exporter или custom scripts