objectif
Diagnostiquer des lenteurs ponctuelles en production avec un impact minimal.
code minimal
# latence des reads > 10ms
sudo bpftrace -e 'k:sys_enter_read { @start[tid]=nsecs; } k:sys_exit_read /@start[tid]/ { $d=(nsecs-@start[tid])/1e6; if($d>10){ printf("%d ms\n",$d); } delete(@start[tid]); }'
utilisation
# histogramme de latence de accept()
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_accept { @ts[tid]=nsecs; } tracepoint:syscalls:sys_exit_accept /@ts[tid]/ { @h=((nsecs-@ts[tid])/1000000); @hist[@h] = count(); delete(@ts[tid]); }'
variante(s) utile(s)
# profil d'échantillonnage (offcpu) simple
sudo bpftrace -e 'profile:hz:49 { @[ustack] = count(); }' -p $(pgrep -xo app)
notes
- nécessite kernel avec eBPF et bpftrace installé.
- ne laissez pas tourner longtemps sur systèmes chargés.