SlideShare uma empresa Scribd logo
1 de 23
Java black box profiling
Alexey Ragozin
alexey.ragozin@gmail.com
The Problem
• There are application
• It doesn’t meat its SLA
• Users/client/stakeholders are unhappy
You are one to fix it!
What to do?
• Do not panic!
• Write out all moving parts in system
• Elaborate acceptance criteria
• Make sure you understand KPI and SLA
• Is problem in Java application?
 Yes - You are ready to start profiling
Moving parts
Server
Browser
Application
Database
Caching
JavaScript
HTTP
Network Network
SQL performance
CPU Memory / Swapping
Disk IO Virtualization
Understanding targets
• Business transaction ≠ Page
• Business transaction ≠ SQL transaction
• Page ≠ HTTP request
• HTTP request ≠ SQL transaction
Make sure you know how your KPI
are translating into milliseconds
Just be before you start profiling
 Take a deep breath
 Make sure problem is in Java part
 Make sure you understand end goal
These points are trivial so it is very easy to forget
them under stress.
Do not make that mistake!
Few more rule before start
Every system is a black box
 Do you think that know what is inside?
 You don’t!
There 3 kinds of data produced by profiling
 Lies
 Darn lies
 Statistics
Data incorrectly interpreted
Data incorrectly collected
Profiling
Reproducing performance issue
Stationary process
• Uniform load reasonable simulating real one
• Goal is optimizing average performance indicators
Transition process
• Goal is optimize prolonged process
• Load profile is changing over time systematically
Profiling single operation
• Goal is to optimize particular operation
Profiling in JVM
• Stack trace sampling
• Byte code instrumentation
• Thread MBeans
• GC logs
• Heap dumps / Heap histogram
More diagnostic sources
• JMX
• Performance counters
• Flight recorder / mission control
Stack trace sampling
• Work best with stationary process
• Uniformly impacts system under test
• Do not require “calibrating”
• Result from multiple runs could be combined
• You deal with probabilities, not hard numbers
• Measure wall clock, not CPU time
Byte code instrumentation
• Useful for all types of experiments
• Produce some absolute numbers
 Number of calls is accurate
 Time is predictably skewed
• Significantlyskewperformance ofsystemundertest
• Require careful targeting
• Could measure CPU time
Threading MBean
Standard JVM Threading MBean
 CPU usage per thread (user/sys)
 Memory allocation per thread
 Blocking / waiting statistics
Tools
SwissJavaKnife(SJK)-https://github.com/aragozin/jvm-tools
• Thread monitor
• Stack Trace Recorder/Analyzer
• Dead object histogram
• and more
BTrace - https://kenai.com/projects/btrace
• Incrementing profiler
• Used via CLI or API
• Scriptable in Java
Profiling strategy
Classify your bottleneck
 CPU
• Application CPU usage
• Excessive memory allocation / GC
 Disk IO
 Network latency
 Network bandwidth
 Inter thread contention
Recipes: CPU hogs
1. You sampling to identify suspects
• Frame frequency histogram + meditation
• Call tree + deep meditation
• Iterative classification
2. Instrument methods to get hard prove
• relative number of calls between methods
3. Iterate to pin point root cause
Recipes: CPU hogs
Iterative classification (JBoss + Seam)
0.00%
10.00%
20.00%
30.00%
40.00%
50.00%
60.00%
70.00%
80.00%
90.00%
100.00%
Base
Other
DefaultServlet.doGet
LifeCycleImpl (render)
LifeCycleImpl (execute)
Business logic
Seam interceptor (lock contention)
Seam interceptor (inject/outject)
Resource bundle (getObject)
Resource bundle (missing)
Faceletcompile
Hibernate (rest)
Hibernate (autoFlush)
JDBC
Recipes: CPU hogs
Iterative classification (JBoss + Seam)
[ROOT]
org.apache.catalina.connector.CoyoteAdapter.service
[JDBC]
org.jboss.jca.adapters.jdbc.
[Hibernate (autoFlush)]
org.hibernate.internal.SessionImpl.autoFlushIfRequired
[Hibernate (rest)]
org.hibernate.
[Facelets compile]
com.sun.faces.facelets.compiler.Compiler.compile
[XML]
javax.xml.
[ResourceBundle - missing resource]
java.util.ResourceBundle.getObject(ResourceBundle.java:395)
[ResourceBundle - getObject]
java.util.ResourceBundle.getObject
[Seam bean interceptor - inject/disinject/outject]
!REQUIRE
!LAST
org.jboss.seam.core.BijectionInterceptor.aroundInvoke
org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke
!NOT FOLLOWED
**.proceed
!ANY
org.jboss.seam.Component.inject
org.jboss.seam.Component.disinject
org.jboss.seam.Component.outject
[Seam bean interceptor - lock contention]
!REQUIRE
!LAST
org.jboss.seam.core.BijectionInterceptor.aroundInvoke
org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke
!NOT FOLLOWED
**.proceed
java.util.concurrent.locks.ReentrantLock
[Seam bean interceptor - other]
!REQUIRE
!LAST
org.jboss.seam.core.BijectionInterceptor.aroundInvoke
org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke
!NOT FOLLOWED
**.proceed
[WorkItemController.doselect]
org.cp.shark.WorkItemController.doselect
[LifecycleImpl.execute]
com.sun.faces.lifecycle.LifecycleImpl.execute
[LifecycleImpl.render]
com.sun.faces.lifecycle.LifecycleImpl.render
[DefaultServlet.doGet]
org.apache.catalina.servlets.DefaultServlet.doGet
[other]
Recipes: Memory issues
1. Indentify thread producing garbage
• SJK: ttop command
2. Classify garbage
• Class histogram of dead object in heap
• SJK: hh --dead
3. Investigate suspect classes
• Heap dump
• Debugging / Instrumentation
Recipes: contention
• Stack trace sampling
 Good for “bad” contention cases
• Thread MBean
 Contention statistics could be enabled
• BTrace
 Analyze lock access pattern using your
codebase knowledge
Sub millisecond profiling
Low latency profiling requires
indirect measuring.
You should not measure sub ms directly!
• Make a hypothesis
• Arrange experiment to prove / disprove
• Collect aggregated metrics
• Compare, analyze and iterate
Flight record / Mission Control
Tight integration with JVM
• Low overhead
• Access to intimate JVM areas
Well balanced set of metrics
• Unobtrusive
• Indicative
Good user interface
May be one day I will abandon my SJK 
Thank you
Alexey Ragozin
alexey.ragozin@gmail.com
http://blog.ragozin.info
- my articles
http://aragozin.timepad.ru
- community events in Moscow

Mais conteúdo relacionado

Mais procurados

Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияYandex
 
Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Yandex
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаAleksandr Boichenko
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantomyaevents
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Alexey Lesovsky
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellAlexey Lesovsky
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Ontico
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Инструмент для нагрузочного тестирования Tsung (Артём Калантай)
Инструмент для нагрузочного тестирования Tsung (Артём Калантай)Инструмент для нагрузочного тестирования Tsung (Артём Калантай)
Инструмент для нагрузочного тестирования Tsung (Артём Калантай)Ontico
 
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton Tsitou"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton TsitouFwdays
 
Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 2)Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 2)Alexey Lesovsky
 
Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахAleksander Alekseev
 
Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting   Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting Yandex
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...it-people
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Ontico
 
Vladimir V Perepelitsa Ae Highload
Vladimir V  Perepelitsa Ae HighloadVladimir V  Perepelitsa Ae Highload
Vladimir V Perepelitsa Ae Highloadrit2010
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumSQALab
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Tanya Denisyuk
 

Mais procurados (20)

Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестирования
 
Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantom
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of Hell
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Инструмент для нагрузочного тестирования Tsung (Артём Калантай)
Инструмент для нагрузочного тестирования Tsung (Артём Калантай)Инструмент для нагрузочного тестирования Tsung (Артём Калантай)
Инструмент для нагрузочного тестирования Tsung (Артём Калантай)
 
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton Tsitou"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
 
Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 2)Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 2)
 
Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
 
Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting   Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
Vladimir V Perepelitsa Ae Highload
Vladimir V  Perepelitsa Ae HighloadVladimir V  Perepelitsa Ae Highload
Vladimir V Perepelitsa Ae Highload
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и Selenium
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
 

Destaque

Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)aragozin
 
JIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutionsJIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutionsaragozin
 
Блеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшейБлеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшейaragozin
 
I know why your Java is slow
I know why your Java is slowI know why your Java is slow
I know why your Java is slowaragozin
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherencearagozin
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozin
 
Performance Test Driven Development (CEE SERC 2013 Moscow)
Performance Test Driven Development (CEE SERC 2013 Moscow)Performance Test Driven Development (CEE SERC 2013 Moscow)
Performance Test Driven Development (CEE SERC 2013 Moscow)aragozin
 
Секреты сборки мусора в Java
Секреты сборки мусора в JavaСекреты сборки мусора в Java
Секреты сборки мусора в Javaaragozin
 
Cборка мусора в Java без пауз (HighLoad++ 2013)
Cборка мусора в Java без пауз  (HighLoad++ 2013)Cборка мусора в Java без пауз  (HighLoad++ 2013)
Cборка мусора в Java без пауз (HighLoad++ 2013)aragozin
 

Destaque (9)

Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)
 
JIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutionsJIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutions
 
Блеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшейБлеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшей
 
I know why your Java is slow
I know why your Java is slowI know why your Java is slow
I know why your Java is slow
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherence
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
 
Performance Test Driven Development (CEE SERC 2013 Moscow)
Performance Test Driven Development (CEE SERC 2013 Moscow)Performance Test Driven Development (CEE SERC 2013 Moscow)
Performance Test Driven Development (CEE SERC 2013 Moscow)
 
Секреты сборки мусора в Java
Секреты сборки мусора в JavaСекреты сборки мусора в Java
Секреты сборки мусора в Java
 
Cборка мусора в Java без пауз (HighLoad++ 2013)
Cборка мусора в Java без пауз  (HighLoad++ 2013)Cборка мусора в Java без пауз  (HighLoad++ 2013)
Cборка мусора в Java без пауз (HighLoad++ 2013)
 

Semelhante a Java black box profiling

владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_haElena Ometova
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
Построение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтПостроение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтAlexander Mazurov
 
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиДоклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиGonchik Tsymzhitov
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестированияIT61
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховИлья Кожухов
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoFAleksey Shipilev
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetestingLiloSEA
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 
Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks ServerLevon Avakyan
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Positive Hack Days
 

Semelhante a Java black box profiling (20)

владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
Hibernate & JPA perfomance
Hibernate & JPA perfomance Hibernate & JPA perfomance
Hibernate & JPA perfomance
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
Построение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтПостроение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайт
 
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиДоклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестирования
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter Кожухов
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
 
Java Performance
Java PerformanceJava Performance
Java Performance
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetesting
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks Server
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 

Mais de aragozin

Java on Linux for devs and ops
Java on Linux for devs and opsJava on Linux for devs and ops
Java on Linux for devs and opsaragozin
 
Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016aragozin
 
What every Java developer should know about network?
What every Java developer should know about network?What every Java developer should know about network?
What every Java developer should know about network?aragozin
 
Java profiling Do It Yourself
Java profiling Do It YourselfJava profiling Do It Yourself
Java profiling Do It Yourselfaragozin
 
DIY Java Profiler
DIY Java ProfilerDIY Java Profiler
DIY Java Profileraragozin
 
Casual mass parallel computing
Casual mass parallel computingCasual mass parallel computing
Casual mass parallel computingaragozin
 
Nanocloud cloud scale jvm
Nanocloud   cloud scale jvmNanocloud   cloud scale jvm
Nanocloud cloud scale jvmaragozin
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)aragozin
 
Garbage collection in JVM
Garbage collection in JVMGarbage collection in JVM
Garbage collection in JVMaragozin
 
Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)aragozin
 
Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?aragozin
 
Борьба с GС паузами в JVM
Борьба с GС паузами в JVMБорьба с GС паузами в JVM
Борьба с GС паузами в JVMaragozin
 
Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?aragozin
 
Devirtualization of method calls
Devirtualization of method callsDevirtualization of method calls
Devirtualization of method callsaragozin
 
Tech talk network - friend or foe
Tech talk   network - friend or foeTech talk   network - friend or foe
Tech talk network - friend or foearagozin
 
Database backed coherence cache
Database backed coherence cacheDatabase backed coherence cache
Database backed coherence cachearagozin
 
ORM and distributed caching
ORM and distributed cachingORM and distributed caching
ORM and distributed cachingaragozin
 
Секреты сборки мусора в Java [DUMP-IT 2012]
Секреты сборки мусора в Java [DUMP-IT 2012]Секреты сборки мусора в Java [DUMP-IT 2012]
Секреты сборки мусора в Java [DUMP-IT 2012]aragozin
 
Поиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решенийПоиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решенийaragozin
 
High Performance Computing - Cloud Point of View
High Performance Computing - Cloud Point of ViewHigh Performance Computing - Cloud Point of View
High Performance Computing - Cloud Point of Viewaragozin
 

Mais de aragozin (20)

Java on Linux for devs and ops
Java on Linux for devs and opsJava on Linux for devs and ops
Java on Linux for devs and ops
 
Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016
 
What every Java developer should know about network?
What every Java developer should know about network?What every Java developer should know about network?
What every Java developer should know about network?
 
Java profiling Do It Yourself
Java profiling Do It YourselfJava profiling Do It Yourself
Java profiling Do It Yourself
 
DIY Java Profiler
DIY Java ProfilerDIY Java Profiler
DIY Java Profiler
 
Casual mass parallel computing
Casual mass parallel computingCasual mass parallel computing
Casual mass parallel computing
 
Nanocloud cloud scale jvm
Nanocloud   cloud scale jvmNanocloud   cloud scale jvm
Nanocloud cloud scale jvm
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)
 
Garbage collection in JVM
Garbage collection in JVMGarbage collection in JVM
Garbage collection in JVM
 
Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)
 
Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?
 
Борьба с GС паузами в JVM
Борьба с GС паузами в JVMБорьба с GС паузами в JVM
Борьба с GС паузами в JVM
 
Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?
 
Devirtualization of method calls
Devirtualization of method callsDevirtualization of method calls
Devirtualization of method calls
 
Tech talk network - friend or foe
Tech talk   network - friend or foeTech talk   network - friend or foe
Tech talk network - friend or foe
 
Database backed coherence cache
Database backed coherence cacheDatabase backed coherence cache
Database backed coherence cache
 
ORM and distributed caching
ORM and distributed cachingORM and distributed caching
ORM and distributed caching
 
Секреты сборки мусора в Java [DUMP-IT 2012]
Секреты сборки мусора в Java [DUMP-IT 2012]Секреты сборки мусора в Java [DUMP-IT 2012]
Секреты сборки мусора в Java [DUMP-IT 2012]
 
Поиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решенийПоиск на своем сайте, обзор open source решений
Поиск на своем сайте, обзор open source решений
 
High Performance Computing - Cloud Point of View
High Performance Computing - Cloud Point of ViewHigh Performance Computing - Cloud Point of View
High Performance Computing - Cloud Point of View
 

Java black box profiling

  • 1. Java black box profiling Alexey Ragozin alexey.ragozin@gmail.com
  • 2. The Problem • There are application • It doesn’t meat its SLA • Users/client/stakeholders are unhappy You are one to fix it!
  • 3. What to do? • Do not panic! • Write out all moving parts in system • Elaborate acceptance criteria • Make sure you understand KPI and SLA • Is problem in Java application?  Yes - You are ready to start profiling
  • 5. Understanding targets • Business transaction ≠ Page • Business transaction ≠ SQL transaction • Page ≠ HTTP request • HTTP request ≠ SQL transaction Make sure you know how your KPI are translating into milliseconds
  • 6. Just be before you start profiling  Take a deep breath  Make sure problem is in Java part  Make sure you understand end goal These points are trivial so it is very easy to forget them under stress. Do not make that mistake!
  • 7. Few more rule before start Every system is a black box  Do you think that know what is inside?  You don’t! There 3 kinds of data produced by profiling  Lies  Darn lies  Statistics Data incorrectly interpreted Data incorrectly collected
  • 9. Reproducing performance issue Stationary process • Uniform load reasonable simulating real one • Goal is optimizing average performance indicators Transition process • Goal is optimize prolonged process • Load profile is changing over time systematically Profiling single operation • Goal is to optimize particular operation
  • 10. Profiling in JVM • Stack trace sampling • Byte code instrumentation • Thread MBeans • GC logs • Heap dumps / Heap histogram More diagnostic sources • JMX • Performance counters • Flight recorder / mission control
  • 11. Stack trace sampling • Work best with stationary process • Uniformly impacts system under test • Do not require “calibrating” • Result from multiple runs could be combined • You deal with probabilities, not hard numbers • Measure wall clock, not CPU time
  • 12. Byte code instrumentation • Useful for all types of experiments • Produce some absolute numbers  Number of calls is accurate  Time is predictably skewed • Significantlyskewperformance ofsystemundertest • Require careful targeting • Could measure CPU time
  • 13. Threading MBean Standard JVM Threading MBean  CPU usage per thread (user/sys)  Memory allocation per thread  Blocking / waiting statistics
  • 14. Tools SwissJavaKnife(SJK)-https://github.com/aragozin/jvm-tools • Thread monitor • Stack Trace Recorder/Analyzer • Dead object histogram • and more BTrace - https://kenai.com/projects/btrace • Incrementing profiler • Used via CLI or API • Scriptable in Java
  • 15. Profiling strategy Classify your bottleneck  CPU • Application CPU usage • Excessive memory allocation / GC  Disk IO  Network latency  Network bandwidth  Inter thread contention
  • 16. Recipes: CPU hogs 1. You sampling to identify suspects • Frame frequency histogram + meditation • Call tree + deep meditation • Iterative classification 2. Instrument methods to get hard prove • relative number of calls between methods 3. Iterate to pin point root cause
  • 17. Recipes: CPU hogs Iterative classification (JBoss + Seam) 0.00% 10.00% 20.00% 30.00% 40.00% 50.00% 60.00% 70.00% 80.00% 90.00% 100.00% Base Other DefaultServlet.doGet LifeCycleImpl (render) LifeCycleImpl (execute) Business logic Seam interceptor (lock contention) Seam interceptor (inject/outject) Resource bundle (getObject) Resource bundle (missing) Faceletcompile Hibernate (rest) Hibernate (autoFlush) JDBC
  • 18. Recipes: CPU hogs Iterative classification (JBoss + Seam) [ROOT] org.apache.catalina.connector.CoyoteAdapter.service [JDBC] org.jboss.jca.adapters.jdbc. [Hibernate (autoFlush)] org.hibernate.internal.SessionImpl.autoFlushIfRequired [Hibernate (rest)] org.hibernate. [Facelets compile] com.sun.faces.facelets.compiler.Compiler.compile [XML] javax.xml. [ResourceBundle - missing resource] java.util.ResourceBundle.getObject(ResourceBundle.java:395) [ResourceBundle - getObject] java.util.ResourceBundle.getObject [Seam bean interceptor - inject/disinject/outject] !REQUIRE !LAST org.jboss.seam.core.BijectionInterceptor.aroundInvoke org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke !NOT FOLLOWED **.proceed !ANY org.jboss.seam.Component.inject org.jboss.seam.Component.disinject org.jboss.seam.Component.outject [Seam bean interceptor - lock contention] !REQUIRE !LAST org.jboss.seam.core.BijectionInterceptor.aroundInvoke org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke !NOT FOLLOWED **.proceed java.util.concurrent.locks.ReentrantLock [Seam bean interceptor - other] !REQUIRE !LAST org.jboss.seam.core.BijectionInterceptor.aroundInvoke org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke !NOT FOLLOWED **.proceed [WorkItemController.doselect] org.cp.shark.WorkItemController.doselect [LifecycleImpl.execute] com.sun.faces.lifecycle.LifecycleImpl.execute [LifecycleImpl.render] com.sun.faces.lifecycle.LifecycleImpl.render [DefaultServlet.doGet] org.apache.catalina.servlets.DefaultServlet.doGet [other]
  • 19. Recipes: Memory issues 1. Indentify thread producing garbage • SJK: ttop command 2. Classify garbage • Class histogram of dead object in heap • SJK: hh --dead 3. Investigate suspect classes • Heap dump • Debugging / Instrumentation
  • 20. Recipes: contention • Stack trace sampling  Good for “bad” contention cases • Thread MBean  Contention statistics could be enabled • BTrace  Analyze lock access pattern using your codebase knowledge
  • 21. Sub millisecond profiling Low latency profiling requires indirect measuring. You should not measure sub ms directly! • Make a hypothesis • Arrange experiment to prove / disprove • Collect aggregated metrics • Compare, analyze and iterate
  • 22. Flight record / Mission Control Tight integration with JVM • Low overhead • Access to intimate JVM areas Well balanced set of metrics • Unobtrusive • Indicative Good user interface May be one day I will abandon my SJK 
  • 23. Thank you Alexey Ragozin alexey.ragozin@gmail.com http://blog.ragozin.info - my articles http://aragozin.timepad.ru - community events in Moscow