Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Side-by-side Performance Comparisons

Side-by-side Performance Comparisons

Presented at http://jeeconf.com/ in Russian

Gleb Smirnov

May 23, 2015
Tweet

Other Decks in Programming

Transcript

  1. 1.  Что  значит  «тормозит»?   2.  Как  понять,  тормозит  ли?

      3.  Как  понять,  почему  тормозит?   4.  Как  сделать  так,  чтобы  не  тормозило?   5.  Как  понять,  что  перестало  тормозить?   6.  Как  сделать  так,  чтобы  не  тормозило  снова?   7.  GOTO  1   План  На  Доклад  
  2. *  Два  типа  ситуаций   *  Приложение,  которое  что-­‐то  делает

     само   *  Нечто  вспомогательное:  рантайм,  фреймворк,  агент   Что  значит  «тормозит»?  
  3. *  Для  приложения:   *  Latency:  сколько  занимает  выполнение  конкретной

      операции?   *  Throughput:  сколько  таких  операций  выполняется  за   отрезок  времени?   Что  значит  «тормозит»?  
  4. *  Определение  SLA   *  «Все  операции  должны  выполняться  не

     медленнее,   чем  за  5  секунд»   Что  значит  «тормозит»?  
  5. Что  значит  «тормозит»?   0   2   4  

    6   8   10   12   Operation  A   Operation  B   Operation  C   Operation  D   SLA:  5s  
  6. *  Определение  SLA   *  «Все  операции  должны  выполняться  не

     медленнее,   чем  за  5  секунд»   *  Как  допустимые  распределения  latency   *  «Операции  типа  А  в  99%  случаев  должны  выполняться  за   7  секунд  или  меньше,  в  95%  случаев  –  за  5  или  меньше»   *  «Операции  типа  B  в  99%  случаев  должны  выполняться  за   4  секунды  или  меньше,  в  95%  случаев  –  за  3  или  меньше»   *  …   Что  значит  «тормозит»?  
  7. Что  значит  «тормозит»?   0   1   2  

    3   4   5   6   7   8   9   Operation  A   Operation  B   SLA   0%   100%   0%   100%  
  8. *  Для  вспомогательных  штук:   *  Как  влияет  на  выполнение

     SLA  приложением-­‐ клиентом?   *  Внутренние  метрики   *  Зависимость  latency  от  throughput   *  Зависимость  throughput  от  latency   Что  значит  «тормозит»?  
  9. *  Для  приложений:  live  monitoring   *  Graphite   * 

    Logs   *  Event  tracing  tools   *  APMs   *  New  Relic   *  AppDynamics   *  Plumbr  ;)   Как  понять,  тормозит  ли?  
  10. *  Для  вспомогательных  штук:   *  Показатели  по  отдельным  метрикам

      *  Сбор  статистики  использования   *  Benchmark  suits   Как  понять,  тормозит  ли?  
  11. *  Руками   *  http://shipilev.net/talks/jeeconf-­‐May2012-­‐ perfMethodology.pdf   *  Автоматически  

    *  Plumbr   *  jClarity   Как  понять,  почему  тормозит?  
  12. *  Marcobenchmark   *  Воспроизводимый  test  case   *  “До”

     должно  тормозить   *  “После”  должно  не  тормозить   *  Нагрузочный  тест   Как  понять,  что  перестало  тормозить?  
  13. Как  понять,  что  перестало  тормозить?   experiments: baseline: small_heap: -Xmx128m

    benchmarks: alloc: class: allocation.AllocatingBenchmark options: allocation.rate: 100000 iterations: 1000000 iterations: 5
  14. Как  понять,  что  перестало  тормозить?   Benchmark (experiment) Cnt Score

    Error Units main.entered baseline 5 81.553 ± 7.599 ms/op benchmark.started baseline 5 31.982 ± 4.636 ms/op allocated.1000000.objects baseline 5 10146.860 ± 54.051 ms/op benchmark.ended baseline 5 10146.860 ± 54.051 ms/op jvm.terminated baseline 5 19.975 ± 3.849 ms/op @gc.count.profiled baseline 5 85.000 ± NaN counts @gc.time.profiled baseline 5 52.000 ± NaN ms main.entered small_heap 5 88.343 ± 16.705 ms/op benchmark.started small_heap 5 31.995 ± 3.849 ms/op allocated.1000000.objects small_heap 5 10190.481 ± 73.659 ms/op benchmark.ended small_heap 5 10190.481 ± 73.659 ms/op jvm.terminated small_heap 5 23.980 ± 23.143 ms/op @gc.count.profiled small_heap 5 185.000 ± NaN counts @gc.time.profiled small_heap 5 91.000 ± NaN m
  15. Тонкости  работы  с  событиями   jvm.started   main.entered   benchmark.started

      allocated.1000000.objects   T0   T0   +  81ms   T0   +  132ms   T0   +  10  s   jvm.started   main.entered   benchmark.started   allocated.1000000.objects   T1   T1   +  74ms   T1   +  107ms   T1   +  11  s   jvm.started   main.entered   benchmark.started   allocated.1000000.objects   T2   T2   +  85ms   T2   +  117ms   T2   +  10  s   ???   ???   ???  
  16. Тонкости  работы  с  событиями   jvm.started   main.entered   benchmark.started

      allocated.1000000.objects   T0   T0   +  81ms   T0   +  132ms   T0   +  10  s   jvm.started   main.entered   benchmark.started   allocated.1000000.objects   T1   T1   +  74ms   T1   +  107ms   T1   +  11  s   jvm.started   main.entered   benchmark.started   allocated.1000000.objects   T2   T2   +  85ms   T2   +  117ms   T2   +  10  s   ???   ???   ???   Нельзя  просто  так  взять  и   Вычесть  два  распределения!  
  17. *  Регрессионные  тесты  производительности   *  Все  макро-­‐бенчмарки   * 

    Нагрузочные  тесты   Как  сделать  так,  чтобы  не  тормозило  снова?