SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Downloaden Sie, um offline zu lesen
О [нагрузочном]
         тестировании и
          мониторинге
       производительности
       для программистов

Александр Шигин, 2010
  shigin@rambler-co.ru
Жизнь проекта


  1   Создание.
  2   Тестирование:
       • функциональное;
       • нагрузочное.


  3   Эксплуатация.
  4   Изменение.
Жизнь проекта


  1   Создание.
  2   Тестирование:
       • функциональное;
       • нагрузочное.


  3   Эксплуатация.
  4   Изменение.
Тестируем

 План тестирования:
  • понять, что мы тестируем;

  • определить желаемые значения;

  • определить граничные условия;

  • протестировать;

  • проанализировать результат.
Тестируем

 План тестирования:
  • понять, что мы тестируем;

  • определить желаемые значения;

  • определить граничные условия;

  • протестировать;

  • проанализировать результат.
Цель тестирования
 Если вам надо измерить процент запросов,
 которые уложатся в 800 мс, не надо измерять
 среднее время ответа: измеряйте процент
 таймаутов.

 Среднее время ничего не
 говорит о количестве таймаутов.
10000
                                    ’hist2.dat’ using 2:xticlabels(1)


время, с неуспех
0.0      100.0%     1000




0.2       14.5%
0.4       10.6%     100




0.6        8.4%      10


0.8        3.6%
1.0        2.7%            Среднее: 0.19
Тестируем

 Начинаем тестирование:
  • тестируем количество запросов в секунду

    (RPS);
  • желаемое значение 1000 RPS;

  • граничное условие среднее время ответа

    до 5 мс.
Начнем тест


 Что еще нужно для теста?
  • программа, которую тестируем;

  • программа, которая тестирует;

  • несколько серверов.
Начнем тест

  •   тестируем nginx + fastcgi сервер;
  •   с помощью самописного скрипта, который
      проверяет вывод;
  •   тестовые машины: два одинаковых
      AMD Athlon64 3500+, FreeBSD 7.0
Первые результаты
      тредов 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 запросов в секунду;
  •   при этом сервер не держит параллельную нагрузку.
Подумаем над ними

          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        тестируемый сервер
Подумаем над ними

 Новые выводы:
  • максимум для тестовой программы ≈ 644

    запросов в секунду;
  • при этом тестовая программа чрезвычайно

    любит CPU.
Вторая попытка
  тредов 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;
  •   при большом количестве параллельных
      соединений, время ответа растет.
Вторая попытка

  тредов 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;
  •   при большом количестве параллельных
      соединений, велико количество таймаутов.
Вторая попытка

          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        тестируемый сервер
Хитрый тест

    s1           s3      s2
   начало тестирования             C   RPS t/o, %
                              s1   5   1024 30
        ожидание              s3   1    223  20
                              s1   6   1017 51
  окончание проверки
                              s3   1    186  40
     окончание теста
Вторая попытка


 Выводы:
  • сервер способен обеспечить ≈ 1000

    запросов в секунду;
  • количество тайм-аутов находится на грани.
Общие выводы

  •   тестируйте одну вещь за раз;
  •   изменяйте одну вещь за раз;
  •   контролируйте ваше окружение
      независимыми тестами;
  •   не забывайте контролировать весь процесс
      тестирования.
Общие выводы

  •   тестируйте одну вещь за раз;
  •   изменяйте одну вещь за раз;
  •   контролируйте ваше окружение
      независимыми тестами;
  •   не забывайте контролировать весь процесс
      тестирования.
Заглушки

 Допущения при тестировании:
   • заглушки не должны отдаваться за 0 сек;

   • лучше, если их будет несколько;

   • не забывайте про ошибки.
 Лучшее тестирование реальное
 тестирование.
Заглушки
   test              serv       mock
          запрос                       Тестирование:
                   20 мс                     20 RPS
               опрос заглушки          Общее время:
                                             120 мс
                                       Одновременно
                   100 мс
                                             ≈ 2.4
Заглушки
   test              serv           mock
          запрос                           Тестирование:
                            опрос                20 RPS
                   500 мс
                                           Общее время:
                                                 520 мс
                                           Одновременно
                   100 мс
                                                 ≈ 12.4
Apache benchmark
 Посмотрим на любимый ab и nginx.
 Результаты последовательных тестов на трех
 машинах:

  c   1    2    5    10    15    20    22
  s1 726 1361 3043 5457 6959 7556 7447
  s2 1197 2653 5299 10500 14458 15782 15774
  s3 995 1876 5352 9300 12792 13530 13689
ab vs nginx
 Я подкорректировал количество запросов так,
 чтобы тест на каждой машине шел ≈ минуту.
 А потом запустил три теста одновременно c 20
 потоками на каждой машине:
               s1    s2    s3
              7750 13321 11323
ab vs nginx


               s1    s2    s3
              7750 13321 11323
 Даже учитывая небольшое время, когда
 тестовые машины работали вдвоем,
 суммарное RPS больше 20 000.
Жизнь проекта


  1   Создание.
  2   Тестирование:
       • функциональное;
       • нагрузочное.


  3   Эксплуатация.
  4   Изменение.
Среднее


 Чем хорошо среднее:
  • среднее легко считать;

  • его можно считать онлайн;

  • оно всем понятно.
Среднее

 Чем плохо среднее:
  • два абсолютно разных распределения

    могут иметь одно среднее;
  • в случаях частого попадания в кеш, вы

    фактически измеряете cache-hit ratio;
  • хорошо, если среднее cчитают правильно.
Среднее
 Определения среднего по мнению
 изготовителей алкогольного тестера
 Draeger Alcotest 7110 MKIII-C:

                              X +...
                         X28 + 272
                    X29+
            X30 +          2
                              2


                      2
Среднее

 Еще один интересный способ посчитать
 среднее.


              99 · x + x
                   ¯
           x=
           ¯
                 100
Онлайн среднее и скользящее окно

 Как правильно считать среднее:
  • скользящее окно;

  • он-лайн.


 Он-лайн: считаем сумму времен ответа и
 количество ответов. Мониторинг разберется.
Онлайн и скользящее




                      отклонение до 40%
Среднее

 Чем плохо среднее:
  • два абсолютно разных распределения

    могут иметь одно среднее;
  • в случаях частого попадания в кеш, вы

    фактически измеряете cache-hit ratio;
  • хорошо, если среднее cчитают правильно.
Два и один




 Сейчас это выглядит, как два одинаковых сервера.
Два и один




 Вот первый.
Два и один




 А вот второй.
Два и один




 Вы все еще считаете их одинаковыми?
Два и один
 Как такое можно проверить?


 Очевидный способ   распределение времен
 ответа.
Два и один
 Как такое можно проверить?
Два и один
 Как такое можно проверить?
 Не менее очевидный, но более простой
 стандартное отклонение.

        первое        второе
    0.256 ± 0.197 0.256 ± 0.296
sd
 Что я знаю про стандартное отклонение, σ ?
  • его легко считать;

  • его можно считать он-лайн;

  • его надо считать.
          n               n 2
             (xi − x )2
                   ¯        xi − ( n xi )2/n
   σ2 =                 = i        i

          i
               n−1             n−1
sd

 Что я знаю про стандартное отклонение, σ ?
Гистограммы

  •   Для показа распределения времен ответа
      можно построить гистограмму;
  •   гистограммы можно строить онлайн, если
      заранее зафиксировать интервалы;
  •   основная проблема визуализация.
Гистограммы
Гистограммы
Гистограммы



  •   можно строить он-лайн;
  •   главная проблема графика.
Классы ответа
Классы ответа
0 с.
                  Квартили




1-ый квартиль




2-ой квартиль
  (медиана)



3-ий квартиль
           1 с.
Среднее против квартилей




               третий квартиль значительно меняется
                                    а среднее нет
Среднее против квартилей




               третий квартиль значительно меняется
                                    а среднее нет
Среднее против квартилей
Среднее против квартилей
Квартили



  •   их нельзя считать он-лайн;
  •   не все понимают, что это.
Благодарю за внимание

      shigin@rambler-co.ru
     friendfeed.com/shigin
Вопросы?

 shigin@rambler-co.ru
friendfeed.com/shigin

Weitere ähnliche Inhalte

Was ist angesagt?

Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Ontico
 
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...odnoklassniki.ru
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)Ontico
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Vadim Madison
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandraodnoklassniki.ru
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Ontico
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Ontico
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Ontico
 
Марина Широчкина: Верстка. Вид снизу
Марина Широчкина: Верстка. Вид снизуМарина Широчкина: Верстка. Вид снизу
Марина Широчкина: Верстка. Вид снизуYandex
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Повышение производительности бизнес-приложений
Повышение производительности бизнес-приложенийПовышение производительности бизнес-приложений
Повышение производительности бизнес-приложенийКРОК
 

Was ist angesagt? (20)

Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008
 
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandra
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
Марина Широчкина: Верстка. Вид снизу
Марина Широчкина: Верстка. Вид снизуМарина Широчкина: Верстка. Вид снизу
Марина Широчкина: Верстка. Вид снизу
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Повышение производительности бизнес-приложений
Повышение производительности бизнес-приложенийПовышение производительности бизнес-приложений
Повышение производительности бизнес-приложений
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 
Threads in java
Threads in javaThreads in java
Threads in java
 
ZooKeeper Java Cloud
ZooKeeper Java CloudZooKeeper Java Cloud
ZooKeeper Java Cloud
 

Andere mochten auch

анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publishrit2010
 
Alexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extraAlexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extrarit2010
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publishrit2010
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийrit2010
 
Sphinx new
Sphinx newSphinx new
Sphinx newrit2010
 
Alexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudoAlexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudorit2010
 
Anatol filin pragmatic documentation 1_r
Anatol filin  pragmatic documentation 1_rAnatol filin  pragmatic documentation 1_r
Anatol filin pragmatic documentation 1_rrit2010
 
Microsoft cluster systems ritconf
Microsoft cluster systems ritconfMicrosoft cluster systems ritconf
Microsoft cluster systems ritconfrit2010
 

Andere mochten auch (8)

анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publish
 
Alexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extraAlexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extra
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publish
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решений
 
Sphinx new
Sphinx newSphinx new
Sphinx new
 
Alexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudoAlexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudo
 
Anatol filin pragmatic documentation 1_r
Anatol filin  pragmatic documentation 1_rAnatol filin  pragmatic documentation 1_r
Anatol filin pragmatic documentation 1_r
 
Microsoft cluster systems ritconf
Microsoft cluster systems ritconfMicrosoft cluster systems ritconf
Microsoft cluster systems ritconf
 

Ähnlich wie Alexander shigin slides

Подводные камни в нагрузочном тестировании
Подводные камни в нагрузочном тестированииПодводные камни в нагрузочном тестировании
Подводные камни в нагрузочном тестированииVladimir Sitnikov
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееRoman Dvornov
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
 
OpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraOpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraSveta Smirnova
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Ontico
 
Нагрузочное_тестирование: как?
Нагрузочное_тестирование: как?Нагрузочное_тестирование: как?
Нагрузочное_тестирование: как?Yandex
 
CodeFest 2011. Нугуманов Н. — Нагрузочное тестирование: Как?
CodeFest 2011. Нугуманов Н. — Нагрузочное тестирование: Как?CodeFest 2011. Нугуманов Н. — Нагрузочное тестирование: Как?
CodeFest 2011. Нугуманов Н. — Нагрузочное тестирование: Как?CodeFest
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей ФедоровCodeFest
 
Поговорим про память
Поговорим про памятьПоговорим про память
Поговорим про памятьAndrey Akinshin
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demandSQALab
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Yandex
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинYandex
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Andrei Solntsev
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубыAleksandr Tarasov
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Экономически эффективный процесс тестирования
Экономически эффективный процесс тестированияЭкономически эффективный процесс тестирования
Экономически эффективный процесс тестированияCodeFest
 

Ähnlich wie Alexander shigin slides (20)

Подводные камни в нагрузочном тестировании
Подводные камни в нагрузочном тестированииПодводные камни в нагрузочном тестировании
Подводные камни в нагрузочном тестировании
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
OpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraOpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second Era
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 
Нагрузочное_тестирование: как?
Нагрузочное_тестирование: как?Нагрузочное_тестирование: как?
Нагрузочное_тестирование: как?
 
CodeFest 2011. Нугуманов Н. — Нагрузочное тестирование: Как?
CodeFest 2011. Нугуманов Н. — Нагрузочное тестирование: Как?CodeFest 2011. Нугуманов Н. — Нагрузочное тестирование: Как?
CodeFest 2011. Нугуманов Н. — Нагрузочное тестирование: Как?
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
 
Поговорим про память
Поговорим про памятьПоговорим про память
Поговорим про память
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Экономически эффективный процесс тестирования
Экономически эффективный процесс тестированияЭкономически эффективный процесс тестирования
Экономически эффективный процесс тестирования
 

Mehr von rit2010

Konstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчикуKonstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчикуrit2010
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailrurit2010
 
иван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейсиван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейсrit2010
 
Andrey Petrov P D P
Andrey Petrov P D PAndrey Petrov P D P
Andrey Petrov P D Prit2010
 
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовAndrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовrit2010
 
Dmitry lohansky rit2010
Dmitry lohansky rit2010Dmitry lohansky rit2010
Dmitry lohansky rit2010rit2010
 
Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010rit2010
 
Related Queries Braslavski Yandex
Related Queries Braslavski YandexRelated Queries Braslavski Yandex
Related Queries Braslavski Yandexrit2010
 
молчанов сергей датацентры 10 04 2010 Light
молчанов сергей датацентры 10 04 2010  Lightмолчанов сергей датацентры 10 04 2010  Light
молчанов сергей датацентры 10 04 2010 Lightrit2010
 
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample SdkSergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdkrit2010
 
Serge P Nekoval Grails
Serge P  Nekoval GrailsSerge P  Nekoval Grails
Serge P Nekoval Grailsrit2010
 
Pavel Braslavski Related Queries Braslavski Yandex
Pavel Braslavski Related Queries Braslavski YandexPavel Braslavski Related Queries Braslavski Yandex
Pavel Braslavski Related Queries Braslavski Yandexrit2010
 
Max Lapshin Erlyvideo V2
Max Lapshin Erlyvideo V2Max Lapshin Erlyvideo V2
Max Lapshin Erlyvideo V2rit2010
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Socketsrit2010
 
Alexey Bazhin Balancing
Alexey Bazhin BalancingAlexey Bazhin Balancing
Alexey Bazhin Balancingrit2010
 
рит, нефункциональная структура команды, безуглый
рит, нефункциональная структура команды, безуглыйрит, нефункциональная структура команды, безуглый
рит, нефункциональная структура команды, безуглыйrit2010
 
левин михаил выступление на рит большие картинки
левин михаил выступление на рит   большие картинкилевин михаил выступление на рит   большие картинки
левин михаил выступление на рит большие картинкиrit2010
 
левин михаил выступление на рит
левин михаил выступление на ритлевин михаил выступление на рит
левин михаил выступление на ритrit2010
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
олег царев Rit 2010 реляционные субд и их нереляционные реализации
олег царев Rit 2010   реляционные субд и их нереляционные реализацииолег царев Rit 2010   реляционные субд и их нереляционные реализации
олег царев Rit 2010 реляционные субд и их нереляционные реализацииrit2010
 

Mehr von rit2010 (20)

Konstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчикуKonstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчику
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailru
 
иван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейсиван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейс
 
Andrey Petrov P D P
Andrey Petrov P D PAndrey Petrov P D P
Andrey Petrov P D P
 
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовAndrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
 
Dmitry lohansky rit2010
Dmitry lohansky rit2010Dmitry lohansky rit2010
Dmitry lohansky rit2010
 
Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010
 
Related Queries Braslavski Yandex
Related Queries Braslavski YandexRelated Queries Braslavski Yandex
Related Queries Braslavski Yandex
 
молчанов сергей датацентры 10 04 2010 Light
молчанов сергей датацентры 10 04 2010  Lightмолчанов сергей датацентры 10 04 2010  Light
молчанов сергей датацентры 10 04 2010 Light
 
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample SdkSergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
 
Serge P Nekoval Grails
Serge P  Nekoval GrailsSerge P  Nekoval Grails
Serge P Nekoval Grails
 
Pavel Braslavski Related Queries Braslavski Yandex
Pavel Braslavski Related Queries Braslavski YandexPavel Braslavski Related Queries Braslavski Yandex
Pavel Braslavski Related Queries Braslavski Yandex
 
Max Lapshin Erlyvideo V2
Max Lapshin Erlyvideo V2Max Lapshin Erlyvideo V2
Max Lapshin Erlyvideo V2
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
 
Alexey Bazhin Balancing
Alexey Bazhin BalancingAlexey Bazhin Balancing
Alexey Bazhin Balancing
 
рит, нефункциональная структура команды, безуглый
рит, нефункциональная структура команды, безуглыйрит, нефункциональная структура команды, безуглый
рит, нефункциональная структура команды, безуглый
 
левин михаил выступление на рит большие картинки
левин михаил выступление на рит   большие картинкилевин михаил выступление на рит   большие картинки
левин михаил выступление на рит большие картинки
 
левин михаил выступление на рит
левин михаил выступление на ритлевин михаил выступление на рит
левин михаил выступление на рит
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
олег царев Rit 2010 реляционные субд и их нереляционные реализации
олег царев Rit 2010   реляционные субд и их нереляционные реализацииолег царев Rit 2010   реляционные субд и их нереляционные реализации
олег царев Rit 2010 реляционные субд и их нереляционные реализации
 

Alexander shigin slides

  • 1. О [нагрузочном] тестировании и мониторинге производительности для программистов Александр Шигин, 2010 shigin@rambler-co.ru
  • 2. Жизнь проекта 1 Создание. 2 Тестирование: • функциональное; • нагрузочное. 3 Эксплуатация. 4 Изменение.
  • 3. Жизнь проекта 1 Создание. 2 Тестирование: • функциональное; • нагрузочное. 3 Эксплуатация. 4 Изменение.
  • 4. Тестируем План тестирования: • понять, что мы тестируем; • определить желаемые значения; • определить граничные условия; • протестировать; • проанализировать результат.
  • 5. Тестируем План тестирования: • понять, что мы тестируем; • определить желаемые значения; • определить граничные условия; • протестировать; • проанализировать результат.
  • 6. Цель тестирования Если вам надо измерить процент запросов, которые уложатся в 800 мс, не надо измерять среднее время ответа: измеряйте процент таймаутов. Среднее время ничего не говорит о количестве таймаутов.
  • 7. 10000 ’hist2.dat’ using 2:xticlabels(1) время, с неуспех 0.0 100.0% 1000 0.2 14.5% 0.4 10.6% 100 0.6 8.4% 10 0.8 3.6% 1.0 2.7% Среднее: 0.19
  • 8. Тестируем Начинаем тестирование: • тестируем количество запросов в секунду (RPS); • желаемое значение 1000 RPS; • граничное условие среднее время ответа до 5 мс.
  • 9. Начнем тест Что еще нужно для теста? • программа, которую тестируем; • программа, которая тестирует; • несколько серверов.
  • 10. Начнем тест • тестируем nginx + fastcgi сервер; • с помощью самописного скрипта, который проверяет вывод; • тестовые машины: два одинаковых AMD Athlon64 3500+, FreeBSD 7.0
  • 11. Первые результаты тредов 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 запросов в секунду; • при этом сервер не держит параллельную нагрузку.
  • 12. Подумаем над ними 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 тестируемый сервер
  • 13. Подумаем над ними Новые выводы: • максимум для тестовой программы ≈ 644 запросов в секунду; • при этом тестовая программа чрезвычайно любит CPU.
  • 14. Вторая попытка тредов 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; • при большом количестве параллельных соединений, время ответа растет.
  • 15. Вторая попытка тредов 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; • при большом количестве параллельных соединений, велико количество таймаутов.
  • 16. Вторая попытка 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. Хитрый тест s1 s3 s2 начало тестирования C RPS t/o, % s1 5 1024 30 ожидание s3 1 223 20 s1 6 1017 51 окончание проверки s3 1 186 40 окончание теста
  • 18. Вторая попытка Выводы: • сервер способен обеспечить ≈ 1000 запросов в секунду; • количество тайм-аутов находится на грани.
  • 19. Общие выводы • тестируйте одну вещь за раз; • изменяйте одну вещь за раз; • контролируйте ваше окружение независимыми тестами; • не забывайте контролировать весь процесс тестирования.
  • 20. Общие выводы • тестируйте одну вещь за раз; • изменяйте одну вещь за раз; • контролируйте ваше окружение независимыми тестами; • не забывайте контролировать весь процесс тестирования.
  • 21. Заглушки Допущения при тестировании: • заглушки не должны отдаваться за 0 сек; • лучше, если их будет несколько; • не забывайте про ошибки. Лучшее тестирование реальное тестирование.
  • 22. Заглушки test serv mock запрос Тестирование: 20 мс 20 RPS опрос заглушки Общее время: 120 мс Одновременно 100 мс ≈ 2.4
  • 23. Заглушки test serv mock запрос Тестирование: опрос 20 RPS 500 мс Общее время: 520 мс Одновременно 100 мс ≈ 12.4
  • 24. Apache benchmark Посмотрим на любимый ab и nginx. Результаты последовательных тестов на трех машинах: c 1 2 5 10 15 20 22 s1 726 1361 3043 5457 6959 7556 7447 s2 1197 2653 5299 10500 14458 15782 15774 s3 995 1876 5352 9300 12792 13530 13689
  • 25. ab vs nginx Я подкорректировал количество запросов так, чтобы тест на каждой машине шел ≈ минуту. А потом запустил три теста одновременно c 20 потоками на каждой машине: s1 s2 s3 7750 13321 11323
  • 26. ab vs nginx s1 s2 s3 7750 13321 11323 Даже учитывая небольшое время, когда тестовые машины работали вдвоем, суммарное RPS больше 20 000.
  • 27. Жизнь проекта 1 Создание. 2 Тестирование: • функциональное; • нагрузочное. 3 Эксплуатация. 4 Изменение.
  • 28. Среднее Чем хорошо среднее: • среднее легко считать; • его можно считать онлайн; • оно всем понятно.
  • 29. Среднее Чем плохо среднее: • два абсолютно разных распределения могут иметь одно среднее; • в случаях частого попадания в кеш, вы фактически измеряете cache-hit ratio; • хорошо, если среднее cчитают правильно.
  • 30. Среднее Определения среднего по мнению изготовителей алкогольного тестера Draeger Alcotest 7110 MKIII-C: X +... X28 + 272 X29+ X30 + 2 2 2
  • 31. Среднее Еще один интересный способ посчитать среднее. 99 · x + x ¯ x= ¯ 100
  • 32. Онлайн среднее и скользящее окно Как правильно считать среднее: • скользящее окно; • он-лайн. Он-лайн: считаем сумму времен ответа и количество ответов. Мониторинг разберется.
  • 33. Онлайн и скользящее отклонение до 40%
  • 34. Среднее Чем плохо среднее: • два абсолютно разных распределения могут иметь одно среднее; • в случаях частого попадания в кеш, вы фактически измеряете cache-hit ratio; • хорошо, если среднее cчитают правильно.
  • 35. Два и один Сейчас это выглядит, как два одинаковых сервера.
  • 36. Два и один Вот первый.
  • 37. Два и один А вот второй.
  • 38. Два и один Вы все еще считаете их одинаковыми?
  • 39. Два и один Как такое можно проверить? Очевидный способ распределение времен ответа.
  • 40. Два и один Как такое можно проверить?
  • 41. Два и один Как такое можно проверить? Не менее очевидный, но более простой стандартное отклонение. первое второе 0.256 ± 0.197 0.256 ± 0.296
  • 42. sd Что я знаю про стандартное отклонение, σ ? • его легко считать; • его можно считать он-лайн; • его надо считать. n n 2 (xi − x )2 ¯ xi − ( n xi )2/n σ2 = = i i i n−1 n−1
  • 43. sd Что я знаю про стандартное отклонение, σ ?
  • 44. Гистограммы • Для показа распределения времен ответа можно построить гистограмму; • гистограммы можно строить онлайн, если заранее зафиксировать интервалы; • основная проблема визуализация.
  • 47. Гистограммы • можно строить он-лайн; • главная проблема графика.
  • 50. 0 с. Квартили 1-ый квартиль 2-ой квартиль (медиана) 3-ий квартиль 1 с.
  • 51. Среднее против квартилей третий квартиль значительно меняется а среднее нет
  • 52. Среднее против квартилей третий квартиль значительно меняется а среднее нет
  • 55. Квартили • их нельзя считать он-лайн; • не все понимают, что это.
  • 56. Благодарю за внимание shigin@rambler-co.ru friendfeed.com/shigin