1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/emqx-emqtt-bench

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Лёгкий инструмент для тестирования MQTT, написанный на Erlang

eMQTT-Bench — это лёгкий инструмент для тестирования протокола MQTT версии 5.0, написанный на языке Erlang.

Вы можете скачать готовые бинарные пакеты по ссылке: https://github.com/emqx/emqtt-bench/releases.

Сборка из исходного кода

Примечание: для сборки требуется Erlang/OTP 22.3 или более поздней версии.

Установка зависимостей

Для работы emqtt-bench требуется установить библиотеку libatomic.

# centos 7
sudo yum install libatomic
# ubuntu 20.04
sudo apt install libatomic1

make

git clone https://github.com/emqx/emqtt-bench.git
cd emqtt-bench
make

Если у вас возникли проблемы с компиляцией, вы можете отключить поддержку QUIC:

BUILD_WITHOUT_QUIC=1 make

Подключение к тесту

$ ./emqtt_bench conn --help
``` **Процессы тестирования.** Значение 0 означает отключение (по умолчанию). Это действует только при использовании вместе с --lowmem. [По умолчанию: 0]

**--log_to** — управляет выводом логов. console: непосредственно в консоль, null: тихо, не выводить логи. [По умолчанию: console]

**--prometheus** — включает сбор метрик через Prometheus. Обычно используется с --restapi для включения конечной точки очистки.

**--restapi** — включает REST API для мониторинга и управления. Сейчас обслуживает только /metrics. Может быть установлен на IP:Port для прослушивания на определённом IP и порту или просто на порт для прослушивания на всех интерфейсах этого порта. [По умолчанию: отключено]

Например, создайте 50 000 одновременных подключений со скоростью поступления 100/сек:

```sh
./emqtt_bench conn -c 50000 -i 10

Подэталонный тест

$ ./emqtt_bench sub --help
Использование: emqtt_bench под [--help <помощь>] [-d <порт распределения>] [-h [<хост>]] [-p [<порт>]] [-V [<версия>]] [-c [<количество>]]
                       [-n [<начальный номер>]] [-i [<интервал>]] [-t <тема>] [--payload-hdrs [<заголовки полезной нагрузки>]] [-q [<качество обслуживания>]]
                       [-Q [<качество опыта>]] [-u <имя пользователя>] [-P <пароль>] [-k [<время поддержания соединения>]] [-C [<очистка>]] [-x [<срок действия>]]
                       [-S [<SSL>]] [--cacertfile <файл сертификата CA>] [--certfile <сертификат>] [--keyfile <закрытый ключ>]
                       [--ws [<WS>]] [--quic [<QUIC>]]
                       [--load-qst <nst_dets_file>] [--ifaddr <ifaddr>] [--prefix <префикс>] [-s [<короткие идентификаторы>]] [-l <lowmem>]
                       [--num-retry-connect [<число повторных попыток подключения>]] [-R [<скорость соединения>]]
                       [--force-major-gc-interval [<интервал принудительного основного GC>]] [--log_to [<log_to>]]
                       [--prometheus]
                       [--restapi <ip>:<port> | <port>]

  --help                     справочная информация
  -d, --dist                 включить порт распределения
  -h, --host                 имя хоста сервера MQTT или имена хостов через запятую [по умолчанию: localhost]
  -p, --port                 номер порта сервера MQTT [по умолчанию: 1883]
  -V, --version              протокол MQTT версии: 3 | 4 | 5 [по умолчанию: 5]
  -c, --count                максимальное количество клиентов [по умолчанию: 200]
  -n, --startnumber          начальная точка при назначении порядковых номеров клиентам. Это полезно при запуске нескольких экземпляров emqtt-bench для тестирования одного и того же брокера (кластера), поэтому начальное число можно запланировать, чтобы избежать коллизии идентификаторов клиентов [по умолчанию: 0]
  -i, --interval             интервал подключения к брокеру [по умолчанию: 10]
  -t, --topic                подписка на тему, поддержка переменных %u, %c, %i
  --payload-hdrs             обработка заголовка полезной нагрузки полученного сообщения. На стороне публикации должна быть включена та же опция в том же порядке. cnt64: проверка строгого увеличения счётчика. ts: подсчёт задержки публикации. [по умолчанию: ]
  -q, --qos                  подписаться на качество обслуживания [по умолчанию: 0]
  -Q, --qoe                  включить отслеживание качества опыта [по умолчанию: false]
  -u, --username             имя пользователя для подключения к серверу
  -P, --password             пароль для подключения к серверу
  -k, --keepalive            поддерживать соединение в секундах [по умолчанию: 300]
  -C, --clean                чистый старт [по умолчанию: true]
  -x, --session-expiry       установить «Session-Expiry» для постоянных сеансов (секунды) [по умолчанию: 0]
  -S, --ssl                  сокет SSL для подключения к серверу [по умолчанию: false]
  --cacertfile               сертификат CA для проверки сервера
  --certfile                 сертификат клиента для аутентификации, если требуется сервером
  --keyfile                  закрытый ключ клиента для аутентификации, если требуется сервером
  --ws

*Примечание: в ответе сохранены оригинальное форматирование текста и спецсимволы.* **websocket transport [default: false]**

* --quic QUIC transport [default: false]
* --load-qst load quic session tickets from dets file
* --ifaddr local ipaddress или interface address
* --prefix Client ID prefix. Если не указано, используется '$HOST_bench_(pub|sub)_$RANDOM_$N', где $HOST — это имя хоста или IP-адрес, указанный в опции --ifaddr, $RANDOM — случайное число, а $N — порядковый номер, присвоенный каждому клиенту. Если указано, суффикс $RANDOM добавляться не будет.

* -s, --shortids использовать короткие идентификаторы клиентов. Если указан --prefix, добавляется префикс, иначе идентификатор клиента — это присвоенный порядковый номер. [по умолчанию: false]

* -l, --lowmem включить режим низкой памяти, но использовать больше CPU

* --num-retry-connect количество попыток установить соединение перед отказом [по умолчанию: 0]

* -R, --connrate скорость соединения (), по умолчанию: 0, при необходимости использовать --interval [по умолчанию: 0]

* --force-major-gc-interval интервал в миллисекундах, через который на процессах стенда будет принудительно выполняться полный сборщик мусора. Значение 0 означает отключено (по умолчанию). Это действует только при использовании вместе с --lowmem. [по умолчанию: 0]

* --log_to управление выводом логов. console: непосредственно в консоль null: тихо, не выводить логи. [по умолчанию: console]

* --prometheus включить сбор метрик через Prometheus. Обычно используется с --restapi для включения очистки конечной точки.

* --restapi включить REST API для мониторинга и управления. Сейчас обслуживает только /metrics. Можно задать IP:Port для прослушивания на определённом IP и порту или просто Port для прослушивания на всех интерфейсах этого порта. [отключено по умолчанию]

**Например, создайте 50 тыс. одновременных подключений со скоростью поступления 100/сек:**

```sh
./emqtt_bench sub -c 50000 -i 10 -t bench/%i -q 2

Pub Benchmark

Usage: emqtt_bench pub [--help <help>] [-d <dist>] [-h [<host>]] [-p [<port>]] [-V [<version>]] [-c [<count>]]
                       [-n [<startnumber>]] [-i [<interval>]] [-I [<interval_of_msg>]] [-u <username>] [-P <password>]
                       [-t <topic>] [--payload-hdrs [<payload_hdrs>]] [-s [<size>]] [-m <message>] [-q [<qos>]]
                       [-Q [<qoe>]] [-r [<retain>]] [-k [<keepalive>]] [-C [<clean>]] [-x [<expiry>]] [-L [<limit>]]
                       [-S [<ssl>]] [--cacertfile <cacertfile>] [--certfile <certfile>] [--keyfile <keyfile>]
                       [--ws [<ws>]] [--quic [<quic>]]
                       [--load-qst <nst_dets_file>] [--ifaddr <ifaddr>] [--prefix <prefix>] [-s [<shortids>]] [-l <lowmem>]
                       [-F [<inflight>]] [-w [<wait_before_publishing>]] [--max-random-wait [<max_random_wait>]]
                       [--min-random-wait [<min_random_wait>]] [--num-retry-connect [<num_retry_connect>]]
                       [-R [<conn_rate>]] [--force-major-gc-interval [<force_major_gc_interval>]] [--log_to [<log_to>]]
                       [--prometheus]
                       [--restapi <ip>:<port> | <port>]

  --help                        help information
  -d, --dist                    enable distribution port
  -h, --host                    mqtt server hostname or comma-separated hostnames [default: localhost]
  -p, --port                    mqtt server port number [default: 1883]
  -V, --version                 mqtt protocol version: 3 | 4 | 5 [default: 5]
  -c, --count                   max count of clients [default: 200]
  -n, --startnumber             The start point when assigning sequence numbers to clients. This is useful when running 
                                multiple emqtt-bench

...

[остальные строки исходного текста оставлены без перевода] **instances to test the same broker (cluster), so the start number can be planned to avoid client ID collision [default: 0]**

-i, --interval интервал подключения к брокеру [по умолчанию: 10]
-I, --interval_of_msg интервал публикации сообщения (мс) [по умолчанию: 1000]
-u, --username имя пользователя для подключения к серверу
-P, --password пароль для подключения к серверу
-t, --topic тема подписки, поддержка переменных %u, %c, %i, %s
--payload-hdrs если установлено, добавьте дополнительные заголовки полезной нагрузки. cnt64: строго увеличивающийся счётчик (64 бита) на издателя ts: отметка времени при излучении примера: --payload-hdrs cnt64,ts [по умолчанию:]
-s, --size размер полезной нагрузки [по умолчанию: 256]
-m, --message задайте содержимое сообщения для публикации
-q, --qos подписка QoS [по умолчанию: 0]
-Q, --qoe включить отслеживание QoE [по умолчанию: false]
-r, --retain сохранить сообщение [по умолчанию: false]
-k, --keepalive поддерживать в рабочем состоянии в секундах [по умолчанию: 300]
-C, --clean очистить начало [по умолчанию: true]
-x, --session-expiry установить «Session-Expiry» для постоянных сеансов (секунды) [по умолчанию: 0]
-L, --limit максимальное количество сообщений для публикации, 0 означает неограниченное [по умолчанию: 0]
-S, --ssl SSL-сокет для подключения к серверу [по умолчанию: false]
--cacertfile сертификат CA для проверки сервера
--certfile клиентский сертификат для аутентификации, если требуется сервером
--keyfile клиентский закрытый ключ для аутентификации, если требуется сервером
--ws веб-транспорт [по умолчанию: false]
--quic транспорт QUIC [по умолчанию: false]
--load-qst загрузить билеты сеанса quic из файла dets
--ifaddr один или несколько (через запятую) исходных IP-адресов
--prefix префикс клиентского ID. Если не указано, используется '$HOST_bench_(pub|sub)_$RANDOM_$N', где $HOST — это либо имя хоста, либо IP-адрес, указанный в опции --ifaddr, $RANDOM — случайное число, а $N — порядковый номер, назначенный каждому клиенту. Если указано, суффикс $RANDOM добавляться не будет.
-s, --shortids использовать короткие клиентские ID. Если указан --prefix, добавляется префикс, иначе клиентским ID является присвоенный порядковый номер. [по умолчанию: false]
-l, --lowmem включить режим низкой памяти, но использовать больше ЦП
-F, --inflight максимальное количество сообщений в пути для QoS 1 и 2, значение 0 для «бесконечности» [по умолчанию: 1]
-w, --wait-before-publishing дождитесь, пока все издатели подключатся, прежде чем начать публикацию [по умолчанию: false]
--max-random-wait максимальный случайный период в мс, который каждый издатель будет ждать перед началом публикации (равномерное распределение) [по умолчанию: 0]
--min-random-wait минимальный случайный период в мс, который каждый издатель будет ждать перед началом публикации (равномерное распределение) [по умолчанию: 0]
--num-retry-connect количество попыток установления соединения перед отказом [по умолчанию: 0]
-R, --connrate скорость соединения (), по умолчанию: 0, при необходимости использовать --interval [по умолчанию: 0]
--force-major-gc-interval интервал в миллисекундах, в котором на процессах стенда будет принудительно выполняться полный сборщик мусора. Значение 0 означает отключено (по умолчанию). Это действует только при использовании вместе с --lowmem. [по умолчанию: 0]
--log_to управление тем, куда направляется вывод журнала. console: непосредственно на консоль null: тихо, не выводить журналы. **--prometheus**

Включить сбор метрик через Prometheus. Обычно используется с --restapi для включения конечной точки очистки.

**--restapi**

Включить REST API для мониторинга и управления. На данный момент обслуживает только /metrics. Можно задать IP:Port, чтобы слушать на определённом IP и порту, или просто порт, чтобы слушать во всех интерфейсах на этом порту. По умолчанию отключено.

Например, создайте 100 соединений, каждое из которых публикует сообщения со скоростью 100 сообщений в секунду.
```sh
./emqtt_bench pub -c 100 -I 10 -t bench/%i -s 256

Локальный интерфейс

./emqtt_bench pub --ifaddr 192.168.1.10
./emqtt_bench sub --ifaddr 192.168.2.10

TLS/SSL (сертификат клиента не требуется серверу)

./emqtt_bench sub -c 100 -i 10 -t bench/%i -p 8883 --ssl
./emqtt_bench pub -c 100 -I 10 -t bench/%i -p 8883 -s 256 --ssl

TLS/SSL (сервер требует сертификат клиента)

./emqtt_bench sub -c 100 -i 10 -t bench/%i -p 8883 --ssl --certfile путь/к/client-cert.pem --keyfile путь/к/client-key.pem
./emqtt_bench pub -c 100 -i 10 -t bench/%i -s 256 -p 8883 --ssl --certfile путь/к/client-cert.pem --keyfile путь/к/client-key.pem

Примечание

Не следует устанавливать параметр '-c' более 64K для ограничения портов TCP на одном исходном адресе, однако вы можете отправлять сообщения с нескольких исходных IP-адресов с помощью '--ifaddr', например:

./emqtt_bench sub -c 200000 -t "perf/test" --ifaddr 192.168.200.18,192.168.200.19,192.168.200.20,192.168.200.21

Обязательно увеличьте лимиты использования ресурсов и расширьте диапазон портов, как показано ниже, в Linux.

ulimit -n 200000
sudo sysctl -w net.ipv4.ip_local_port_range="1025 65534"

Автор

Команда EMQX.

Введение

Инструмент для тестирования производительности Erlang MQTT версии 5.0. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/emqx-emqtt-bench.git
git@api.gitlife.ru:oschina-mirror/emqx-emqtt-bench.git
oschina-mirror
emqx-emqtt-bench
emqx-emqtt-bench
master