Что такое long killer в контексте Linux/DevOps?

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

Ответ

В моей практике "long killer" — это не конкретная утилита, а общий подход или набор инструментов для автоматического завершения процессов, которые превышают разумные лимиты выполнения. Чаще всего это применяется к долгим запросам в базах данных и фоновым задачам.

Типичные сценарии и реализации:

1. Для баз данных (PostgreSQL пример):

-- Настройка на уровне сессии/пользователя
ALTER DATABASE mydb SET statement_timeout = '30s';
ALTER USER app_user SET statement_timeout = '60s';

-- Принудительное завершение через мониторинг
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes'
  AND state = 'active'
  AND usename = 'app_user';

2. Автоматизированный скрипт-монитор (cron):

#!/bin/bash
# /usr/local/bin/kill-long-queries.sh

# Для MySQL
mysql -e "
SELECT CONCAT('KILL QUERY ', id, ';')
FROM information_schema.processlist
WHERE TIME > 300  -- > 5 минут
  AND COMMAND = 'Query'
  AND USER NOT IN ('system user', 'event_scheduler')
" | grep -v "CONCAT" | mysql

# Для процессов ОС (например, find/tar)
pkill -9 find  # Если find работает >1 часа

3. Интеграция с мониторингом (Prometheus + Alertmanager):

# Правило Alertmanager
route:
- match:
    severity: long-query
  receiver: kill-webhook

# Конфигурация webhook-обработчика
receivers:
- name: kill-webhook
  webhook_configs:
  - url: 'http://localhost:9099/kill'
    send_resolved: false

4. Использование systemd limits:

# /etc/systemd/system/my-service.service.d/limits.conf
[Service]
TimeoutStopSec=30s
RuntimeMaxSec=1h    # Автоматически остановит сервис через 1 час

Ключевые принципы, которые я соблюдаю:

  • Логирование: Всегда логирую, что было убито и почему
  • Эскалация: Сначала отправляю SIGTERM, через паузу — SIGKILL
  • Белые списки: Исключаю системные процессы и критические задачи
  • Уведомления: Отправляю алерты в Slack/Telegram перед убийством

Инструменты для продвинутого управления:

  • cpulimit для ограничения CPU
  • ulimit для ограничения ресурсов процесса
  • cgroups для контейнеризированных workloads
  • pt-kill (из Percona Toolkit) для умного управления запросами MySQL