1. О [нагрузочном]
тестировании и
мониторинге
производительности
для программистов
Александр Шигин, 2010
shigin@rambler-co.ru
2. Жизнь проекта
1 Создание.
2 Тестирование:
• функциональное;
• нагрузочное.
3 Эксплуатация.
4 Изменение.
3. Жизнь проекта
1 Создание.
2 Тестирование:
• функциональное;
• нагрузочное.
3 Эксплуатация.
4 Изменение.
4. Тестируем
План тестирования:
• понять, что мы тестируем;
• определить желаемые значения;
• определить граничные условия;
• протестировать;
• проанализировать результат.
5. Тестируем
План тестирования:
• понять, что мы тестируем;
• определить желаемые значения;
• определить граничные условия;
• протестировать;
• проанализировать результат.
6. Цель тестирования
Если вам надо измерить процент запросов,
которые уложатся в 800 мс, не надо измерять
среднее время ответа: измеряйте процент
таймаутов.
Среднее время ничего не
говорит о количестве таймаутов.
7. Тестируем
Начинаем тестирование:
• тестируем количество запросов в секунду
(RPS);
• желаемое значение 1000 RPS;
• граничное условие среднее время ответа
до 5 мс.
8. Начнем тест
Что еще нужно для теста?
• программа, которую тестируем;
• программа, которая тестирует;
• несколько серверов.
9. Начнем тест
• тестируем nginx + fastcgi сервер;
• с помощью самописного скрипта, который
проверяет вывод;
• тестовые машины: два одинаковых
AMD Athlon64 3500+, FreeBSD 7.0
10. Первые результаты
тредов 1 2 3 4 5 6 9
t, мс 1.9 2.7 3.9 5.2 6.6 5.4 12.0
σ 7.0 6.6 4.7 6.9 9.5 7.3 13.3
rps 370 543 593 617 626 644 644
• по этим данным, максимум запросов для сервера
≈ 600 запросов в секунду;
• при этом сервер не держит параллельную нагрузку.
11. Подумаем над ними
C 1 2 3 4 5 9
user s1 20 34 35 44 46 44
sys s1 8 12 12 10 10 12
user qa 50 71 80 80 79 84
sys qa 8 9 13 17 19 16
s1 тестируемый сервер
12. Подумаем над ними
Новые выводы:
• максимум для тестовой программы ≈ 644
запросов в секунду;
• при этом тестовая программа чрезвычайно
любит CPU.
13. Вторая попытка
тредов 1 2 3 4 5 6 9
t, мс 1.9 2.7 3.4 4.0 4.6 5.4 8.0
σ 4.6 7.0 4.7 8.4 7.1 7.3 6.5
rps 512 709 868 916 1036 1076 1078
• максимум RPS ≈ 1036;
• при большом количестве параллельных
соединений, время ответа растет.
14. Вторая попытка
тредов 1 2 3 4 5 6 9
rps 512 709 868 916 1036 1076 1078
t/o, % 0 0 6 25 30 51 74
• максимум RPS ≈ 900;
• при большом количестве параллельных
соединений, велико количество таймаутов.
15. Вторая попытка
C 3 2 3 4 5 9
user s1 35 39 57 64 67 79
sys s1 10 16 16 13 15 16
user qa 27 39 41 49 79 63
sys qa 12 16 17 16 19 23
s1 тестируемый сервер
17. Вторая попытка
Выводы:
• сервер способен обеспечить ≈ 1000
запросов в секунду;
• количество тайм-аутов находится на грани.
18. Общие выводы
• тестируйте одну вещь за раз;
• изменяйте одну вещь за раз;
• контролируйте ваше окружение
независимыми тестами;
• не забывайте контролировать весь процесс
тестирования.
19. Общие выводы
• тестируйте одну вещь за раз;
• изменяйте одну вещь за раз;
• контролируйте ваше окружение
независимыми тестами;
• не забывайте контролировать весь процесс
тестирования.
20. Заглушки
Допущения при тестировании:
• заглушки не должны отдаваться за 0 сек;
• лучше, если их будет несколько;
• не забывайте про ошибки.
Лучшее тестирование реальное
тестирование.
21. Заглушки
test serv mock
запрос Тестирование:
20 мс 20 RPS
опрос заглушки Общее время:
120 мс
Одновременно
100 мс
≈ 2.4
22. Заглушки
test serv mock
запрос Тестирование:
опрос 20 RPS
500 мс
Общее время:
520 мс
Одновременно
100 мс
≈ 12.4
23. Жизнь проекта
1 Создание.
2 Тестирование:
• функциональное;
• нагрузочное.
3 Эксплуатация.
4 Изменение.
24. Среднее
Чем хорошо среднее:
• среднее легко считать;
• его можно считать онлайн;
• оно всем понятно.
25. Среднее
Чем плохо среднее:
• два абсолютно разных распределения
могут иметь одно среднее;
• в случаях частого попадания в кеш, вы
фактически измеряете cache-hit ratio;
• хорошо, если среднее cчитают правильно.
26. Среднее
Определения среднего по мнению
изготовителей алкогольного тестера
Draeger Alcotest 7110 MKIII-C:
X +...
X28 + 272
X29+
X30 + 2
2
2
27. Среднее
Еще один интересный способ посчитать
среднее.
99 · x + x
¯
x=
¯
100
28. Онлайн среднее и скользящее окно
Как правильно считать среднее:
• скользящее окно;
• он-лайн.
Он-лайн: считаем сумму времен ответа и
количество ответов. Мониторинг разберется.
30. Среднее
Чем плохо среднее:
• два абсолютно разных распределения
могут иметь одно среднее;
• в случаях частого попадания в кеш, вы
фактически измеряете cache-hit ratio;
• хорошо, если среднее cчитают правильно.
31. Два и один
Сейчас это выглядит, как два одинаковых сервера.
37. Два и один
Как такое можно проверить?
Не менее очевидный, но более простой
стандартное отклонение.
первое второе
0.256 ± 0.197 0.256 ± 0.296
38. sd
Что я знаю про стандартное отклонение, σ ?
• его легко считать;
• его можно считать он-лайн;
• его надо считать.
n n 2
(xi − x )2
¯ xi − ( n xi )2/n
σ2 = = i i
i
n−1 n−1
40. Гистограммы
• Для показа распределение времен ответа
можно построить гистограмму;
• гистограммы можно строить онлайн, если
заранее зафиксировать интервалы;
• основная проблема визуализация.