Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

comet:load-testing [2018/02/24 18:41]
anastation468 [Запуск сервера]
comet:load-testing [2019/12/18 01:58]
Строка 1: Строка 1:
-<​rst>​RU::​003-Нагрузочное тестирование::​001-Сценарий тестирования</​rst>​ 
-<​rst>​Header:​ Сценарий тестирования</​rst>​ 
- 
-====== Нагрузочное тестирование с tsung ====== 
- 
-Для нагрузочного тестирования можно использовать программу 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=&​amp;​myid=&​amp;​devid=0&​amp;​v=3.24&​amp;​uuid=48wTOvoa-uEtC0thHzBkIKir14sXgkOy&​amp;​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>​