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

Martin Schurz - Linux Performance

Martin Schurz - Linux Performance

Performanceprobleme begegnen uns häufig, Lösungen dafür sind nicht immer einfach oder offensichtlich. Ich möchte verschiedene Methoden zur Analyse von Problemen vorstellen, die sich in der Praxis bewährt haben. Zusätzlich werde ich auf mehrere Tools eingehen, die bei tieferen Analyse helfen. Die meisten davon können auch für Applikationsspezifische Probleme genutzt werden, ins Besondere auch für Java, PHP und Python. Im Vortrag wird mit praxisnahen, konkreten Beispielen der Einsatz der Tools und Methoden demonstriert.

Transcript

  1. LINUX PERFORMANCE LINUX PERFORMANCE

  2. WARUM NICHT WARUM NICHT Ressourcen sind günsitg vor allem in

    der Cloud optimieren kostet Zeit
  3. WARUM WARUM Kann man sich die Ressourcen leisten? erreicht man

    die gewünschten Antwortzeiten? Nachhaltigkeit!
  4. MINDSET MINDSET Kenne dein Ziel Historienwissen hilft Fragen formulieren, und

    Antworten suchen
  5. BEGINNE BEI SCHNITTSTELLEN BEGINNE BEI SCHNITTSTELLEN Datenbank HTTP Dateisystem

  6. Quelle: https://www.slideshare.net/brendangregg/lisa2019-linux-systems-performance/11

  7. TOOLS TOOLS

  8. Quelle: http://www.brendangregg.com/Perf/linux_observability_tools.png

  9. EINFACH ANFANGEN EINFACH ANFANGEN Ziel: Überblick einfache Tools nutzen nicht

    zuviele Informationen auf einmal
  10. LOAD AVERAGE LOAD AVERAGE # uptime 13:17:41 up 146 days,

    ..., load average: 14.11, 15.19, 16.00
  11. OMG … DIE LOAD IST OMG … DIE LOAD IST

    HOCH !1!1 11! HOCH !1!1 11!
  12. CPU CPU Tools: top, mpstat, pidstat oder Alternativen: htop, atop

    Gründe für Auslastung verstehen
  13. SPEICHER UND KERNEL METRIKEN SPEICHER UND KERNEL METRIKEN Tools: free,

    vmstat, fincore, slabtop herausfinden, wie der RAM genutzt wird wie steht es um den Kernel
  14. IO IO Tools: iostat, iotop Ableiten von IO/s Wichtiger Unterschied

    read und write IO?
  15. NETZWERK NETZWERK Tools: tcpdump, nstat, ss(, netstat) Netzwerkaktivität und Statistiken

    Überblick zu Verbingungen und Abhängigkeiten
  16. DOCKER DOCKER DOCKER DOCKER Tools: docker stats alle bisherigen Systemtools

    gehen auch Achtung: von Außen messen!
  17. PRAKTISCHE TOOLS PRAKTISCHE TOOLS Prometheus node_exporter / telegraf Grafana wenns

    klein bleiben darf: Netdata
  18. TOOLS IN DER CLOUD TOOLS IN DER CLOUD Google /

    AWS / Azure Default Datadog Honeycomb …
  19. ÜBERBLICK BEHALTEN ÜBERBLICK BEHALTEN Kennt euch mit euren Tools aus

    Krisentools sollten vor der Krise installiert sein Probleme sind zum Analysieren da Stellt Fragen und sucht Antworten
  20. METHODEN METHODEN

  21. ANTI-METHODEN ANTI-METHODEN “Der andere wars” aka “Die Datenbank ist schuld”

    Chaos Debugging Irgendwas ändern Neustarten Tool X installieren und ausprobieren Zögern und zuschauen
  22. FUNDIERTE METHODEN FUNDIERTE METHODEN 60 Sekunden Linux Performance Analyse USE

    Methode Aktives Benchmarking
  23. 60 SEKUNDEN ANALYSE 60 SEKUNDEN ANALYSE uptime dmesg | tail

    vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV,TCP,ETCP 1 top Linux Performance Analysis in 60 seconds
  24. USE METHODE USE METHODE Utilization Saturation Errors The USE Method

  25. AKTIVES BENCHMARKING AKTIVES BENCHMARKING System unter Last setzen Bottleneck suchen

    Frage: warum ist das nicht 10x schneller?
  26. IN JEDEM FALL IN JEDEM FALL zuerst kommt die Frage

    dann die Antwort schaut auf einfache, verständliche Metriken
  27. TRACING TRACING

  28. STRACE STRACE Linux system calls tracen hoher overhead! einfach einsetzbar

    Nachfolger: perf trace
  29. EBPF EBPF ursprünglich für Netzwerkcode entwickelt inzwischen in allen teilen

    von Linux enthalten eine eigene Art Software https://ebpf.io/what-is-ebpf
  30. BCC TOOLS BCC TOOLS Sammlung vieler Tracing Tools sehr geringer

    Overhead Production Safe! https://github.com/iovisor/bcc
  31. GENAUERES TRACING GENAUERES TRACING perf und bpftrace http://www.brendangregg.com/perf.html http://www.brendangregg.com/ebpf.html

  32. Quelle: http://www.brendangregg.com/linuxperf.html

  33. PROFILING PROFILING

  34. CPU PROFILING CPU PROFILING Tool: perf Sampling von Aktivitäten Sammelt

    Stack Traces Samplingfrequenz hat Einfluss auf Leistung
  35. Flame Graph Search mys.. m.. mysqld`row_search_for_mysql mysqld`handle_one_connection my.. mysqld`do_command my..

    mysqld`find_all_keys mysqld`btr.. mysq.. mysqld`handle_select mysqld`JOIN::exec l.. mys.. libc.. mysqld`sub_select mysqld`eval.. m.. my.. mysqld`mysql_select libc.so.1`_lwp_start mysql.. m.. mysq.. mysqld`handler::read_multi_range.. mysq.. mysqld`mysql_execute_command mysqld`ha_innobase::general_fetch mysqld`ha_innobase::general_fetch mysqld`row_.. mys.. mysql.. mysqld`ro.. mysql.. mysqld`row_search_for_mysql mysqld`filesort mysqld`dispatch_command mysqld`mysql_parse l.. mysq.. mysqld`join_read_prev mysqld`ha_innobase::index_next_.. mysqld`execute_sqlcom_select mysql.. mysql.. l.. m.. m.. mys.. my.. mysqld`row_sel_get_.. mysqld`ha_innobase::index_prev mysqld`QUICK_RANGE_SELECT::get_n.. mysq.. mysqld`do_select m.. my.. mysqld`handler::read_range_next libc.so.1`_thrp_setup mysq.. mysqld`btr.. mysqld`create_sort_index my..
  36. FLAMEGRAPHS FLAMEGRAPHS CPU Analyse, kann aber auch IO und andere

    Äußerst Hilfreich um konkrete Ansatzpunkte können auch aus anderen Tracings erstellt werden https://github.com/brendangregg/FlameGraph
  37. FLAMESCOPE FLAMESCOPE Frage: was, wenn mich nur ein paar Millisekunden

    eines Flamegraph interessieren? a visualiza on tool that uses subsecond offset heat maps and flame graphs to analyze periodic ac vity, variance, and perturba ons https://github.com/Netflix/flamescope
  38. NACHSCHLAGEWERKE NACHSCHLAGEWERKE Homepage von Brendan Gregg

  39. ZUM MERKEN ZUM MERKEN erst die Frage, dann die Antwort

    es gibt mehr als genug Tools FlameGraphs sind genial
  40. ANHANG ANHANG

  41. CPU CPU uptime top mpstat -P ALL 1 pidstat 1

    htop atop
  42. LAST LAST taskset -c 3 stress -c 500 taskset -c

    3 stress -i 1 taskset -c 3 stress -c 1 -i 1
  43. MEMORY MEMORY free -m vmstat -t 1 fincore /var/lib/mysql/*

  44. IO IO iostat -xz 5 iotop -a

  45. NETZWERK NETZWERK nstat -s nstat -s | grep -i ret

    ss -ntp ss -nltp tcpdump -nn port 53 tcpdump -nn port 80 -A
  46. NETDATA NETDATA https://github.com/netdata/netdata

  47. TRACING TRACING strace -tttT -f nslookup strace -tttT -e network

    -f nslookup strace -tttT -e file -f nslookup pgrep httpd strace -tttT -e file -f -p (httpd pid) www.google.de www.google.de www.google.de
  48. BCC TOOLS BCC TOOLS ls /usr/share/bcc/tools/ /usr/share/bcc/tools/opensnoop /usr/share/bcc/tools/opensnoop -n httpd

    /usr/share/bcc/tools/execsnoop /usr/share/bcc/tools/cachestat /usr/share/bcc/tools/fileslower 0 /usr/share/bcc/tools/tcpstates
  49. PROFILING PROFILING perf record -F 99 -a -g – sleep

    10 perf report -n --stdio /usr/share/bcc/tools/profile -dfF 99 30 | ./FlameGraph/flamegraph.pl > perf.svg https://github.com/brendangregg/FlameGraph https://github.com/Netflix/flamescope