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

Devoxx FR 2016 - Java vous déclare sa flamme

Devoxx FR 2016 - Java vous déclare sa flamme

Flamegraphs

70c847e72b2d961ae15362ddd4dda79b?s=128

Nicolas Peters

April 23, 2016
Tweet

Transcript

  1. #DevoxxFR Flamegraphs Java vous déclare sa flamme Nicolas Peters @nicolaspeters

    Vincent Beretti @vberetti 1
  2. #DevoxxFR Qui ? Nicolas Peters Lead Dev Canal Plus VOD

    @nicolaspeters Vincent Beretti Architecte pôle conseil @vberetti 2
  3. #DevoxxFR CPU 100% 3

  4. #DevoxxFR 4

  5. #DevoxxFR Inspirations http://www.brendangregg.com/ @brendangregg https://blog.virtual-void.net/ @virtualvoid 5

  6. #DevoxxFR perf perf record perf script data stacks perf 6

  7. #DevoxxFR out.stacks 7

  8. #DevoxxFR out.stacks java 4502 2664.295070: 10101010 cpu-clock: 7fe0a9d2b55b [unknown] (/tmp/perf-4067.map)

    7fe0a9d2b520 [unknown] (/tmp/perf-4067.map) 7fe0a9ffc1545 [unknown] (/tmp/perf-4067.map) 7fe0aa234a30 [unknown] (/tmp/perf-4067.map) 7fe0aa26b68c [unknown] (/tmp/perf-4067.map) 7fe0aa1cac1c [unknown] (/tmp/perf-4067.map) 7fe0aa2cf09cc [unknown] (/tmp/perf-4067.map) 7fe0aa29f70cc [unknown] (/tmp/perf-4067.map) 7fe0aa1bf44cc [unknown] (/tmp/perf-4067.map) 7fe0aa25a824 [unknown] (/tmp/perf-4067.map) 7fe0aa15e374 [unknown] (/tmp/perf-4067.map) 7fe0aa2538ac [unknown] (/tmp/perf-4067.map) 7fe0aa275404 [unknown] (/tmp/perf-4067.map) 7fe0aa27227c [unknown] (/tmp/perf-4067.map) 7fe0aa16d3e4 [unknown] (/tmp/perf-4067.map) 7fe0aa27d2cc [unknown] (/tmp/perf-4067.map) …. 7fe0a9ef3da4 [unknown] (/tmp/perf-4067.map) 7fe0a9ef1f9cc [unknown] (/tmp/perf-4067.map) 7fe0a90004e7 call_stub (/tmp/perf-4067.map) 63d6ea JavaCalls::call_helper (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 63aba4 JavaCalls::call_virtual (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 63b1b9 JavaCalls::call_virtual (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 67e6d1 thread_entry (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 9b40aa JavaThread::thread_main_inner (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 869702 java_start (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 697dc5 start_thread (/usr/lib64/libpthread-2.17.so) 8 ns tid
  9. #DevoxxFR 7fe0a9ffc1545 Lsun/reflect/GeneratedMethodAccessor65;::invoke fe0aa26b68c Lorg/springframework/web/method/support/InvocableHandlerMethod;::doInvoke perf + perf-agent perf record

    perf script data stacks perf-agent map perf java -XX:+PreserveFramePointer -jar myapp.jar Java > 1.8.0_66 perf-map-agent 9
  10. #DevoxxFR java 4502 2664.295070: 10101010 cpu-clock: 7fe0a9d2b520 Lsample/flamegraph/web/FiboController;::fibonacci (/tmp/perf-4067.map) 7fe0a9ffc1545

    Lsun/reflect/GeneratedMethodAccessor65;::invoke (/tmp/perf-4067.map) 7fe0aa234a30 Ljava/lang/reflect/Method;::invoke (/tmp/perf-4067.map) 7fe0aa26b68c Lorg/springframework/web/method/support/InvocableHandlerMethod;::doInvoke (/tmp/perf-4067.map) 7fe0aa1cac1c Lorg/springframework/web/method/support/InvocableHandlerMethod;::invokeForRequest (/tmp/perf-4067.map) 7fe0aa2cf09cc Lorg/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod;::invokeAndHandle (/tmp/perf-4067.map) 7fe0aa29f70cc Lorg/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter;::invokeHandlerMethod (/tmp/perf-4067.map) 7fe0aa1bf44cc Lorg/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter;::handleInternal (/tmp/perf-4067.map) 7fe0aa25a824 Lorg/springframework/web/servlet/mvc/method/AbstractHandlerMethodAdapter;::handle (/tmp/perf-4067.map) 7fe0aa15e374 Lorg/springframework/web/servlet/DispatcherServlet;::doDispatch (/tmp/perf-4067.map) 7fe0aa2538ac Lorg/springframework/web/servlet/DispatcherServlet;::doService (/tmp/perf-4067.map) 7fe0aa275404 Lorg/springframework/web/servlet/FrameworkServlet;::processRequest (/tmp/perf-4067.map) 7fe0aa27227c Lorg/springframework/web/servlet/FrameworkServlet;::doGet (/tmp/perf-4067.map) 7fe0aa16d3e4 Ljavax/servlet/http/HttpServlet;::service (/tmp/perf-4067.map) 7fe0aa27d2cc Lorg/springframework/web/servlet/FrameworkServlet;::service (/tmp/perf-4067.map) …. 7fe0a9ef3da4 Lorg/apache/tomcat/util/net/NioEndpoint$SocketProcessor;::doRun (/tmp/perf-4067.map) 7fe0a9ef1f9cc Lorg/apache/tomcat/util/net/NioEndpoint$SocketProcessor;::run (/tmp/perf-4067.map) 7fe0a90004e7 call_stub (/tmp/perf-4067.map) 63d6ea JavaCalls::call_helper (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 63aba4 JavaCalls::call_virtual (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 63b1b9 JavaCalls::call_virtual (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 67e6d1 thread_entry (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 9b40aa JavaThread::thread_main_inner (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 869702 java_start (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/server/libjvm.so) 697dc5 start_thread (/usr/lib64/libpthread-2.17.so) symboles de l’application out.stacks avec perf.map 10
  11. #DevoxxFR perf-java-flames perf record perf script data stacks perf-agent map

    stack-collapsed flamegraph.pl perf java -XX:+PreserveFramePointer -jar myapp.jar Java > 1.8.0_66 perf-map-agent flamegraph 11
  12. #DevoxxFR Installation & Lancement Installation yum install -y perf yum

    install -y java-1.8.0-openjdk-devel # > 1.8.0_66 git clone https://github.com/brendangregg/FlameGraph /opt/FlameGraph git clone https://github.com/jrudolph/perf-map-agent /opt/perf-map-agent cmake . && make && bin/create-links-in /usr/bin Lancement java -XX:+PreserveFramePointer <your program> perf-java-flames <pid> 12
  13. #DevoxxFR Live Demo 13

  14. #DevoxxFR Fibonacci 14

  15. #DevoxxFR GC 15

  16. #DevoxxFR 16

  17. #DevoxxFR Off - CPU 17 http://agentzh.org/misc/slides/off-cpu-flame-graphs.pdf Yichun Zhang (agentzh)

  18. #DevoxxFR Off-CPU 18 http://fr.slideshare.net/brendangregg/linux-bpf-superpowers

  19. #DevoxxFR Évènements 19

  20. #DevoxxFR • Facile • Rapide • Peu d’impact • Java

    + kernel Linux • Vision processus interne de la JVM • N’importe quel process • Extensible : event + api • Privilège root pour perf • Documentation de perf Conclusion + 20
  21. #DevoxxFR Conclusion CPU == € 21 BPE/BCC

  22. #DevoxxFR BCC http://fr.slideshare.net/brendangregg/linux-bpf-superpowers

  23. #DevoxxFR Références • Java Mixed-Mode Flame Graph http://www.brendangregg.com/blog/2015-11-06/java-mixed- mode-flame-graphs.html •

    Saving 13 Million Computational Minutes per Day http://techblog.netflix.com/2016/04/saving-13-million- computational-minutes.html?m=1 • Le code de la presentation https://github.com/npeters/devoxx-flamegraph 23
  24. #DevoxxFR Questions ? 24