Я тестирую Tigase с помощью Tsung.Испытание нагрузки Tigase с помощью Tsung. Конфликт регистрации 409
Мой первый тестовый скрипт будет регистрировать пользователей только на сервере Tigase. Но у меня есть странная проблема тиражирования запросов Tigase для некоторых идентификаторов пользователей.
Посмотрите на файл tsung.dump ниже.
Запрос регистра пользователя пользователя 43-tsung-user-2 повторяется дважды. В первый раз это успешно, во второй раз Tigase возвращает ошибку конфликта 409, то есть пользователь уже зарегистрирован.
NewClient:1438077277.663192:1
load:1
Send:1438077277.703507:<0.89.0>:<?xml version='1.0'?><stream:stream id='1' to='ubuntu' xmlns='jabber:client' version='1.0' xmlns:stream='http://etherx.jabber.org/streams'>
Recv:1438077277.71206:<0.89.0>:<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='ubuntu' id='93e35376-1be1-413c-9285-2aa9558798d4' version='1.0' xml:lang='en'>
Recv:1438077277.717071:<0.89.0>:<stream:features><auth xmlns="http://jabber.org/features/iq-auth"/><register xmlns="http://jabber.org/features/iq-register"/><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism></mechanisms><ver xmlns="urn:xmpp:features:rosterver"/><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression></stream:features>
Send:1438077280.718581:<0.89.0>:<iq id='2' type='set' ><query xmlns='jabber:iq:register'><username>43-tsung-user1</username><resource>tsung</resource><password>pass1</password></query></iq>
Recv:1438077280.726568:<0.89.0>:<iq xmlns="jabber:client" type="result" id="2"/>
Send:1438077282.719153:<0.89.0>:</stream:stream>
EndClient:1438077282.719198:1
load:0
NewClient:1438077293.46312:1
load:1
Send:1438077293.4815:<0.94.0>:<?xml version='1.0'?><stream:stream id='3' to='ubuntu' xmlns='jabber:client' version='1.0' xmlns:stream='http://etherx.jabber.org/streams'>
Recv:1438077293.484589:<0.94.0>:<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='ubuntu' id='4edaf8c7-72a5-48a0-99dc-33e6a348b838' version='1.0' xml:lang='en'>
Recv:1438077293.488533:<0.94.0>:<stream:features><auth xmlns="http://jabber.org/features/iq-auth"/><register xmlns="http://jabber.org/features/iq-register"/><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism></mechanisms><ver xmlns="urn:xmpp:features:rosterver"/><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression></stream:features>
Send:1438077296.490041:<0.94.0>:<iq id='4' type='set' ><query xmlns='jabber:iq:register'><username>43-tsung-user2</username><resource>tsung</resource><password>pass2</password></query></iq>
Recv:1438077296.502307:<0.94.0>:<iq xmlns="jabber:client" type="result" id="4"/>
Send:1438077298.496102:<0.94.0>:</stream:stream>
EndClient:1438077298.496152:2
load:0
NewClient:1438077303.492718:1
load:1
Send:1438077303.502446:<0.96.0>:<?xml version='1.0'?><stream:stream id='5' to='ubuntu' xmlns='jabber:client' version='1.0' xmlns:stream='http://etherx.jabber.org/streams'>
Recv:1438077303.511868:<0.96.0>:<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='ubuntu' id='e3f918bc-e45d-4bb2-918d-62d85b93cec7' version='1.0' xml:lang='en'>
Recv:1438077303.515748:<0.96.0>:<stream:features><auth xmlns="http://jabber.org/features/iq-auth"/><register xmlns="http://jabber.org/features/iq-register"/><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism></mechanisms><ver xmlns="urn:xmpp:features:rosterver"/><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression></stream:features>
Send:1438077306.517646:<0.96.0>:<iq id='6' type='set' ><query xmlns='jabber:iq:register'><username>43-tsung-user2</username><resource>tsung</resource><password>pass2</password></query></iq>
Recv:1438077306.524358:<0.96.0>:<iq xmlns="jabber:client" type="error" id="6"><query xmlns="jabber:iq:register"><username>43-tsung-user2</username><resource>tsung</resource><password>pass2</password></query><error type="cancel" code="409"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xml:lang="en" xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">Unsuccessful registration attempt</text></error></iq>
Send:1438077308.520858:<0.96.0>:</stream:stream>
EndClient:1438077308.52091:3
load:0
Мой тест должен занять 30 секунд, при этом пользователи будут переключаться через 10 секунд. Поэтому в базе данных должно быть создано 3 пользователя. После окончания тестирования я могу видеть только 2 пользователя, что также говорит о том, что tsung.dump говорит alredy.
Почему tsung повторяет запрос для некоторых пользователей? Tsung ведет себя аналогично независимо от нагрузки. Если я подниму номера нагрузки, я получу подобное поведение. В большинстве случаев количество успешно зарегистрированных пользователей будет составлять около половины числа пользователей, сгенерированных tsung.
Ниже мой tsung.xml
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/local/Cellar/tsung/1.5.1/share/tsung/tsung-1.0.dtd”>
<tsung loglevel="debug" version="1.0" dumptraffic="true">
<clients>
<client host="localhost" use_controller_vm="true" maxusers="100000"></client>
</clients>
<servers>
<server host="192.168.100.133" port="5222" type="tcp" weight="1"></server>
</servers>
<load>
<arrivalphase phase="1" duration="30" unit="second">
<users maxnumber="100000" interarrival="10" unit="second"></users>
</arrivalphase>
</load>
<options>
<option type="ts_jabber" name="global_number" value="100000"></option>
<option type="ts_jabber" name="userid_max" value="100000" />
<option type="ts_jabber" name="domain" value="ubuntu"></option>
<option type="ts_jabber" name="username" value="43-tsung-user"></option>
<option type="ts_jabber" name="passwd" value="pass"></option>
</options>
<sessions>
<session probability="100" name="jabber-example" type="ts_jabber">
<request>
<jabber type="connect" ack="local"></jabber>
</request>
<thinktime value="3" random="false"></thinktime>
<request>
<jabber type="register" ack="no_ack" id="new"></jabber>
</request>
<thinktime value="2" random="false"></thinktime>
<request>
<jabber type="close" ack="no_ack"></jabber>
</request>
</session>
</sessions>
</tsung>
Ничего себе. Я бы никогда не закончил это с чтения документов tsung http://tsung.erlang-projects.org/user_manual/conf-options.html#xmpp-jabber-options. Большое спасибо. – Goran
Есть ли какое-либо временное решение для сценариев регистрации пользователей при тестировании нагрузки? – Goran
Также эта ссылка указывает, что проблема уже была исправлена ProcessOne: https://support.process-one.net/browse/TSUN-50. Я немного смущен. – Goran