Различия
Здесь показаны различия между двумя версиями данной страницы.
comet:load-testing [2017/06/12 04:13] levhav |
comet:load-testing [2019/12/18 01:58] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Нагрузочное тестирование ====== | ||
- | |||
- | Для нагрузочного тестирования можно использовать программу tsung | ||
- | |||
- | ===== Установка tsung ===== | ||
- | <code bash> | ||
- | apt install tsung | ||
- | </code> | ||
- | |||
- | ===== Сценарий тестирования ===== | ||
- | |||
- | Программе tsung нужно передать файл с описанием сценария теста. Вот пример простого тестового сценария. | ||
- | <file XML tsung.xml> | ||
- | <?xml version="1.0"?> | ||
- | <!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd"> | ||
- | <tsung loglevel="debug" version="1.0"> | ||
- | <clients> | ||
- | <client host="localhost" use_controller_vm="true" maxusers="64000" /> | ||
- | </clients> | ||
- | |||
- | <servers> | ||
- | <server host="localhost" port="8087" type="tcp" /> | ||
- | </servers> | ||
- | |||
- | <load> | ||
- | <arrivalphase phase="1" duration="60" unit="second"> | ||
- | <users maxnumber="64000" arrivalrate="2500" unit="second" /> | ||
- | </arrivalphase> | ||
- | </load> | ||
- | |||
- | <options> | ||
- | <option name="ports_range" min="1025" max="65535"/> | ||
- | </options> | ||
- | | ||
- | <sessions> | ||
- | <session name="websocket" probability="100" type="ts_websocket"> | ||
- | <request> | ||
- | <websocket type="connect" path="/comet-server/ws/sesion=&myid=&devid=0&v=3.24&uuid=48wTOvoa-uEtC0thHzBkIKir14sXgkOy&api=js"></websocket> | ||
- | </request> | ||
- | |||
- | |||
- | <for var="i" from="1" to="20000" incr="1"> | ||
- | <thinktime value="150"/> | ||
- | </for> | ||
- | | ||
- | <request> | ||
- | <websocket type="close"></websocket> | ||
- | </request> | ||
- | </session> | ||
- | </sessions> | ||
- | </tsung> | ||
- | </file> | ||
- | В нём указано что к localhost к порту 8087 надо подключатся по вебсокетам. И создавать по 2500 тысячи подключений каждую секунду до тех пор пока их в сумме не наберётся 64000. | ||
- | |||
- | То есть этот сценарий просто создаёт тестовую нагрузку в 64000 пользователей онлайн. Тест синтетический и реальные 64000 будут нагружать сервер несколько по другому а не просто висеть онлайн, но это уже от приложения и предполагаемого сценария использования комет сервера можно составить свой сценарий тестирования который бы отражал ваш тип нагрузки на комет сервер. | ||
- | |||
- | ===== Нагрузка более чем 64000 онлайн ===== | ||
- | |||
- | Нагрузка в 64000 это максимум который позволит создать операционная система. Если хотите больше то надо тестировать один сервер с нескольких машин с tsung одновременно. TCP-соединение уникально определяется четверкой [source ip, source port, dest ip, dest port], таким образом с одной машины на 1 порт сервера можно создать не более 64 тыс одновременных соединений | ||
- | |||
- | ===== Запуск сервера ===== | ||
- | |||
- | Для того чтобы ОС позволила открыть столько соединений надо увеличить ограничения на количество файловых дескрипторов командой | ||
- | <code bash> | ||
- | ulimit -m 64000 | ||
- | </code> | ||
- | |||
- | В файле comet.ini надо в секции benchmark задать настройки секций benchmark и ws | ||
- | |||
- | <code ini> | ||
- | [benchmark] | ||
- | to_log = true ; Вывод замеров о нагрузке в лог | ||
- | |||
- | |||
- | [ws] | ||
- | ip = 0.0.0.0 | ||
- | backlog = 10000 | ||
- | epoll_size = 100000 | ||
- | thread_num = 12 ; количество потоков, делайте больше чем ядер на сервере так как сервер не lock-free | ||
- | benchmark = 1 ; Интервал между замерами нагрузки (0 = не замерять) | ||
- | port = 8087 | ||
- | uptimeTestInterval = 600 ; Интервал для проверок uptime у соединений (так же за одно выправляет значение счётчика пользователей онлайн) | ||
- | maxUptime = 0 ; Максимально значение uptime после которого коннект отключается. | ||
- | </code> | ||
- | |||
- | А потом запустить сервер в консольном режиме чтоб видеть вывод статистики | ||
- | <code bash> | ||
- | ./cpp_comet | ||
- | </code> | ||
- | |||
- | ===== Запуск теста ===== | ||
- | |||
- | Нагрузочный тест запускаем так: | ||
- | <code bash> | ||
- | ulimit -m 64000 | ||
- | tsung -f ~/tsung.xml start | ||
- | </code> | ||
- | В tsung аргументом if передаём файл сценария для тестирования. | ||
- | |||
- | ===== Анализ результатов ===== | ||
- | |||
- | В процессе тестирования вы можете наблюдать за загрузкой ОС на пример через программы htop или iotop | ||
- | Проверить то что встроенный в комет сервер счётчик общего количества соединений онлайн показывает цифры близкие к правде можно командой: | ||
- | <code bash> | ||
- | ss -p | grep "cpp_comet" | wc -l | ||
- | </code> | ||
- | Она подсчитает количество входящих соединений средствами операционной системы. | ||
- | |||
- | По окончании тестирования tsung в папку складывает отчёт о тестировании. Но чтобы его было можно посмотреть надо его обработать скриптом который идёт вместе с самим tsung. Скрипт лежит в папке /usr/lib/tsung/bin/tsung_stats.pl | ||
- | |||
- | <code bash> | ||
- | cd /home/victor/.tsung/log/20170524-1159 | ||
- | /usr/lib/tsung/bin/tsung_stats.pl | ||
- | </code> | ||
- | |||
- | После чего скрипт с генерирует уже человеко читаемый отчёт о тестировании. | ||
- | |||
- | <note tip>Следует учитывать то что в данном сценарии и тест и сервер на одной машине так что грузить они её будут совместно. Для чистоты эксперимента рекомендуется сервер запускать на одной машине, а tsung на другой машине.</note> | ||