Discard overflow
Categories:
Когда вы указываете профиль нагрузки генератор рассчитывает порядок и время выполнения запросов. Можно назвать это расписанием выполнения запросов. За это отвечает планировщик Пандоры. Он получает запросы от провайдера и по этому расписанию передает инстансам. А каждый инстанс выполняет запросы последовательно.
Может возникнуть ситуация, когда планировщик считает, что наступило время выполнить следующий запрос, но все инстансы заняты ожиданием выполнения своего текущего запроса. В этом случае планировщик может поступать одним из 2-х способов.
- Дождаться, когда освободится какой-либо инстанс и передать запрос ему позже расписания
- Отбросить этот запрос и ожидать следующий, рассчитывая на то, что когда наступит время следующего запроса, уже освободится один из инстансов.
За то, какому поведению следовать, отвечает настройка инстанса discard_overflow
discard_overflow: false
- нестрогое следование расписанию. Генератор гарантирует, что все запланированные запросы будут отправлены. Время выполнения теста зависит от производительности тестируемого сервиса, среднего времени ответа и количества инстансов.discard_overflow: true
- строгое следование генератором расписания запросов. Запросы, не уложившиеся в расписание, отбрасываются. Время выполнения теста предопределено. Запросы, которые не укладываются в расписание, помечаются неудавшимися (ошибка net777
, а так же добавляется tag:discarded). Пандора считает, что тест не уложился в расписание, если время запроса отстало на 2 сек. То есть используется 2 секундное скользящее окно.
По-умолчанию, начиная с версии pandora@0.5.24 настройка discard_overflow: true
Немного теории
Когда может возникнуть ситуация, в которой планировщику придется выбрать поведение discard_overflow? Как было сказано
выше, когда наступает время выполнения запроса, но нет свободных инстансов, которые этот запрос могут выполнить.
Почему это может происходить? Когда время ответа от сервера высоко и комбинация кол-во инстансов и профиль нагрузки
выбраны не оптимально. То есть когда V > N * 1/rps
, где
V
- время ответа нагружаемого сервера (в секундах)N
- кол-во инстансов
Таким образом, чтобы избежать такой ситуации можно
- увеличить кол-во инстансов
- уменьшить профиль нагрузки
- оптимизировать нагружаемый сервис, для уменьшения времени ответа