Ответ
В моей практике "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