Siege — это инструмент для нагрузочного тестирования HTTP/HTTPS. Он позволяет имитировать большое количество пользователей, одновременно обращающихся к вашему веб-серверу, и анализировать, как он справляется с нагрузкой. Siege полезен для тестирования Apache, Nginx, API-эндпоинтов и любых веб-приложений перед запуском в продакшен.
В этом руководстве я покажу два способа установки Siege на Debian:
- APT — из официальных репозиториев (просто, версия зависит от релиза)
- Сборка из исходников — для получения самой свежей версии
| Метод | Версия | Обновления | Для кого |
|---|---|---|---|
| APT | Debian 13: 4.1.6; Debian 12/11: 4.0.7 | Через apt upgrade | Большинство пользователей |
| Сборка из исходников | Последняя (4.1.7+) | Вручную (скрипт-помощник) | Кому нужна самая свежая версия |
Предварительные требования
Перед установкой убедитесь, что:
- Вы имеете права
sudo(администратора)
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
Что делает: sudo — выполняет команду от имени суперпользователя; whoami — показывает имя текущего пользователя.
✅ Ожидаемый вывод в терминале:
root
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.
Способ 1: Установка Siege через APT (рекомендуемый)
Этот способ наиболее прост и подходит для большинства пользователей.
Шаг 1: Обновите систему
sudo apt update && sudo apt upgrade -y
Шаг 2: Установите Siege
sudo apt install -y siege
Шаг 3: Проверьте установку
siege --version
✅ Ожидаемый вывод (Debian 13): SIEGE 4.1.6
✅ Ожидаемый вывод (Debian 12/11): SIEGE 4.0.7
Способ 2: Сборка Siege из исходников (актуальная версия)
Этот способ подойдёт, если вам нужна последняя версия Siege (сейчас 4.1.7+).
Шаг 1: Установите зависимости для сборки
sudo apt update
sudo apt install -y build-essential libssl-dev zlib1g-dev wget
Что делает: Устанавливает компиляторы, библиотеки OpenSSL и zlib, утилиту wget.
Шаг 2: Создайте скрипт для автоматической сборки и обновления
mkdir -p ~/.local/bin
nano ~/.local/bin/update-siege-source
Содержимое скрипта:
#!/usr/bin/env bash
set -euo pipefail
usage() {
printf 'Usage: %s [system|--local] [--force]\n' "$0"
}
die() {
printf 'Error: %s\n' "$*" >&2
exit 1
}
require_cmd() {
if ! command -v "$1" >/dev/null 2>&1; then
die "Missing required command: $1. Install dependencies with: sudo apt install build-essential libssl-dev zlib1g-dev wget"
fi
}
version_from_binary() {
binary=$1
if [ ! -x "$binary" ]; then
printf 'none\n'
return
fi
version_output=$("$binary" --version 2>&1 || true)
version=$(printf '%s\n' "$version_output" | sed -n 's/^SIEGE //p' | sed -n '1p')
if [ -n "$version" ]; then
printf '%s\n' "$version"
else
printf 'unknown\n'
fi
}
mode=system
force=no
for arg in "$@"; do
case "$arg" in
system)
mode=system
;;
--local | local)
mode=local
;;
--force)
force=yes
;;
-h | --help)
usage
exit 0
;;
*)
usage >&2
exit 2
;;
esac
done
if [ "$EUID" -eq 0 ]; then
die 'Run this helper as your normal user, not with sudo.'
fi
case "$mode" in
system)
prefix=/usr/local
install_cmd=(sudo make install)
require_cmd sudo
;;
local)
prefix=$HOME/.local
install_cmd=(make install)
;;
esac
for cmd in wget tar make gcc nproc sed find mktemp; do
require_cmd "$cmd"
done
build_dir=$(mktemp -d "${TMPDIR:-/tmp}/siege-build.XXXXXX")
trap 'rm -rf "$build_dir"' EXIT
archive=$build_dir/siege-latest.tar.gz
wget -q -O "$archive" https://download.joedog.org/siege/siege-latest.tar.gz
tar -xzf "$archive" -C "$build_dir"
src_dir=$(find "$build_dir" -mindepth 1 -maxdepth 1 -type d -name 'siege-*' -print -quit)
[ -n "$src_dir" ] || die 'Could not find the extracted Siege source directory.'
configure_script=$src_dir/configure
[ -f "$configure_script" ] || die 'The extracted source tree does not contain a configure script.'
latest_version=$(sed -n "s/^PACKAGE_VERSION='\\([^']*\\)'.*/\\1/p" "$configure_script")
[ -n "$latest_version" ] || die 'Could not detect the Siege source version.'
installed_bin=$prefix/bin/siege
current_version=$(version_from_binary "$installed_bin")
printf 'Install mode: %s\n' "$mode"
printf 'Install prefix: %s\n' "$prefix"
printf 'Current source version: %s\n' "$current_version"
printf 'Latest source version: %s\n' "$latest_version"
if [ "$current_version" = "$latest_version" ] && [ "$force" = no ]; then
printf 'Siege source build is already current.\n'
exit 0
fi
cd "$src_dir"
./configure --prefix="$prefix"
make -j"$(nproc)"
"${install_cmd[@]}"
installed_version=$(version_from_binary "$installed_bin")
[ "$installed_version" = "$latest_version" ] || die "Installed version check failed: expected $latest_version, got $installed_version"
printf 'SIEGE %s\n' "$installed_version"
printf 'Installed binary: %s\n' "$installed_bin"
Шаг 3: Сделайте скрипт исполняемым
chmod +x ~/.local/bin/update-siege-source
export PATH="$HOME/.local/bin:$PATH"
Шаг 4: Запустите сборку
Для системной установки (в /usr/local, доступно всем пользователям):
update-siege-source
Для установки в домашнюю директорию (только текущему пользователю):
update-siege-source --local
Шаг 5: Проверьте установку
siege --version
✅ Ожидаемый вывод: SIEGE 4.1.7 (или новее)
Основы работы с Siege
Базовая команда
siege -c 10 -r 5 https://example.com/
Что делает: 10 одновременных пользователей (-c 10), каждый делает 5 запросов (-r 5).
Тест по времени
siege -c 25 -t 1M https://example.com/
Что делает: 25 пользователей, тест длится 1 минуту (-t 1M). Доступны единицы: S (секунды), M (минуты), H (часы).
Режим benchmark (без задержек)
siege -b -c 50 -t 30S https://example.com/
Что делает: -b отключает задержку между запросами (максимальная нагрузка).
Тестирование нескольких URL из файла
Создайте файл со списком URL:
nano ~/urls.txt
Пример содержимого:
https://example.com/
https://example.com/about
https://example.com/contact
Запустите тест:
siege -c 20 -t 2M -f ~/urls.txt
Случайный порядок URL (-i):
siege -i -c 20 -t 5M -f ~/urls.txt
Отправка пользовательских заголовков
siege -c 10 -t 30S \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
https://api.example.com/endpoint
JSON-вывод (для обработки скриптами)
siege -q -j -c 10 -r 5 https://example.com/
Сохранение результатов в лог
siege --log="$HOME/siege-results.log" -c 25 -t 1M https://example.com/
Понимание результатов Siege
| Метрика | Что означает | Как использовать |
|---|---|---|
| Transactions | Количество завершённых HTTP-запросов | Сравнивайте только при одинаковой длительности и количестве пользователей |
| Availability | Процент успешных запросов | Любое падение ниже 100% требует расследования |
| Response time | Среднее время ответа (секунды) | Сравнивайте до и после изменений на сервере |
| Transaction rate | Запросов в секунду | Показатель пропускной способности |
| Failed transactions | Неудачные запросы (ошибки, таймауты) | Первые сбои — сигнал к остановке теста |
Обновление Siege
Обновление APT-версии
sudo apt update && sudo apt install --only-upgrade siege -y
Обновление сборки из исходников
update-siege-source # для системной установки
# или
update-siege-source --local # для установки в домашнюю директорию
Удаление Siege
Удаление APT-версии
sudo apt remove --purge siege
sudo apt autoremove
Удаление сборки из исходников
Для системной установки:
sudo rm -f /usr/local/bin/siege /usr/local/bin/bombardment /usr/local/bin/siege.config /usr/local/bin/siege2csv.pl
sudo rm -f /usr/local/etc/siegerc /usr/local/etc/urls.txt
sudo rm -f /usr/local/share/man/man1/siege.1 /usr/local/share/man/man1/bombardment.1 /usr/local/share/man/man1/siege.config.1 /usr/local/share/man/man1/siege2csv.1
Для установки в домашнюю директорию:
rm -f "$HOME/.local/bin/siege" "$HOME/.local/bin/bombardment" "$HOME/.local/bin/siege.config" "$HOME/.local/bin/siege2csv.pl"
rm -f "$HOME/.local/etc/siegerc" "$HOME/.local/etc/urls.txt"
rm -f "$HOME/.local/share/man/man1/siege.1" "$HOME/.local/share/man/man1/bombardment.1" "$HOME/.local/share/man/man1/siege.config.1" "$HOME/.local/share/man/man1/siege2csv.1"
Удаление пользовательских настроек
rm -rf ~/.siege
Решение типичных проблем
8.1 Ошибка: Connection refused или timeout
Симптом: Все запросы завершаются с ошибкой соединения.
Причина: Сервер не доступен (не работает, блокировка файрволом, неправильный URL).
Пошаговое решение:
Шаг 1: Проверьте, доступен ли сервер через curl:
curl -I https://example.com/
Шаг 2: Убедитесь, что вы тестируете разрешённые системы (только свои).
Шаг 3: Проверьте настройки файрвола на сервере.
8.2 Ошибка: Too many open files
Симптом: При высоком уровне одновременных пользователей Siege падает с ошибкой.
Причина: Ограничение системы на количество открытых файлов.
Пошаговое решение:
Шаг 1: Проверьте текущий лимит:
ulimit -n
Шаг 2: Временно увеличьте лимит для текущей сессии:
ulimit -n 65535
Шаг 3: Для постоянного увеличения добавьте строку в /etc/security/limits.conf (требует перезагрузки).
8.3 Ошибка: SSL certificate problem
Симптом: Тесты HTTPS падают с ошибкой сертификата.
Причина: Самоподписанный или просроченный сертификат.
Пошаговое решение:
Исправьте сертификат на сервере или используйте HTTP для внутренних тестов. Siege не поддерживает флаг -k (ignore certificates) так же, как curl.
8.4 Ошибка: Missing source build configuration
Симптом: При запуске source-сборки Siege пишет, что не может открыть /usr/local/etc/siegerc.
Причина: Файлы конфигурации не установились.
Пошаговое решение:
Переустановите Siege из исходников:
cd /путь/к/исходникам
sudo make install
8.5 Siege не показывает прогресс (только итоги)
Симптом: Во время теста нет вывода в терминал, только финальная статистика.
Причина: Используется флаг -q (quiet) или -j (JSON).
Пошаговое решение:
Уберите флаги -q и -j для обычного вывода.
Чек-лист: что проверить после установки
- [ ] Siege установлен:
siege --versionпоказывает версию - [ ] Можно запустить тест:
siege -c 1 -r 1 https://httpbin.org/status/200→ завершается с транзакциями - [ ] Для source-сборки:
which siegeпоказывает/usr/local/bin/siegeили~/.local/bin/siege - [ ] Скрипт обновления работает:
update-siege-sourceне выдаёт ошибок
Часто задаваемые вопросы (FAQ)
Вопрос: Можно ли тестировать сайты в интернете (например, google.com)?
Ответ: Технически да, но не делайте этого. Вы можете нарушить условия использования и быть заблокированными. Тестируйте только свои системы или те, на которые у вас есть явное разрешение.
Вопрос: В чём разница между Siege и Apache Bench (ab)?
Ответ: Siege поддерживает больше функций (случайный порядок URL, задержки, пользовательские заголовки) и проще в использовании. Apache Bench (ab) легче, но менее гибкий.
Вопрос: Как остановить бегущий тест Siege?
Ответ: Нажмите Ctrl+C. Siege покажет статистику на момент остановки.
Вопрос: Почему при одинаковой команде результаты различаются?
Ответ: Сеть, загрузка сервера и другие факторы влияют на результат. Сравнивайте тренды, а не отдельные замеры.
Вопрос: Может ли Siege повредить сервер?
Ответ: Да, при слишком высокой нагрузке. Начинайте с малого количества пользователей (1-10) и увеличивайте постепенно, наблюдая за метриками сервера.
Заключение
Теперь Siege установлен на вашем Debian. Вы можете тестировать производительность веб-серверов и API, прежде чем они попадут под реальную нагрузку.
Что дальше?
- Установите Apache или Nginx для тестирования
- Настройте мониторинг сервера во время нагрузочных тестов
- Изучите официальную документацию Siege