Установка Siege на Debian 13, 12, 11: полное руководство

Siege — это инструмент для нагрузочного тестирования HTTP/HTTPS. Он позволяет имитировать большое количество пользователей, одновременно обращающихся к вашему веб-серверу, и анализировать, как он справляется с нагрузкой. Siege полезен для тестирования Apache, Nginx, API-эндпоинтов и любых веб-приложений перед запуском в продакшен.

В этом руководстве я покажу два способа установки Siege на Debian:

  1. APT — из официальных репозиториев (просто, версия зависит от релиза)
  2. Сборка из исходников — для получения самой свежей версии
МетодВерсияОбновленияДля кого
APTDebian 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, прежде чем они попадут под реальную нагрузку.

Что дальше?