The art of JVM profiling

День 1 /  / Зал 1  /  RU / Hardcore. Really hard and demanding talk, you'll understand only if you're an experienced engineer.

No Java profiler is perfectly accurate, since JDK does not provide sufficient means to find where CPU time is exactly spent. Even "honest" profilers based on private HotSpot APIs will not tell the whole truth. Hardware counters and kernel functions could probably help, but unfortunately they are not aware of Java code at all. We will discuss several approaches to Java profiling: JVM TI, AsyncGetCallTrace, perf_events and Flame Graphs. Their principles and limitations will be considered. We will find a way to combine the advantages of all approaches together. Finally, we will see how Odnoklassniki performs full-stack profiling in production: from Java code down to Linux kernel.

Download presentation
Andrei Pangin

Andrei Pangin is the lead software engineer at Odnoklassniki, specializing in distributed systems and high-loaded server development. He previously worked on HotSpot Virtual Machine at Oracle where he gained the expertise in JVM internals and low-level system programming. Andrei is fond of sharing knowledge about unfamiliar OpenJDK and HotSpot JVM features. He authors one-nio project on GitHub — the framework for developing high-performant servers in Java.

Vadim Tsesko

Vadim Tsesko is the lead developer at Odnoklassniki Platform. He started his way in IT/CS in 2004 with working on hydroacoustic systems and research projects on static code analysis. He developed highload distributed internet services at Yandex.Verticals. Occasionally gives lectures and talks on the distributed and parallel computations and data storage. In his spare time he studies papers, solves Project Euler problems, plays PS4 with his wife or programs LEGO Mindstorms.