高并发场景

WIP 介绍高并发场景下的 design 和 troubleshotting。

Tools

Trace 任意函数的执行时间

该方案整理自某同事的 idea。

考虑下面的场景,我们需要查看某动态链接库 /path/to/libtiflash_proxy.sohandle_pending_applies 函数每次调用的耗时。

1
2
3
4
5
6
7
8
9
10
11
12
13
perf probe --del 'probe_libtiflash_proxy:*'
BIN=/path/to/libtiflash_proxy.so
TOKEN=handle_pending_applies
ITER=0
objdump $BIN --syms | grep $TOKEN | awk '{print $6}' | while read -r tok ; do
ITER=$(expr $ITER + 1)
NAME=$TOKEN\_$ITER
echo $NAME, $TOKEN, $ITER, $TOKEN\_$ITER
perf probe -x $BIN --no-demangle $NAME=$tok
perf probe -x $BIN --no-demangle $NAME=$tok%return
done
perf record -e probe_libtiflash_proxy:\* -aR sleep 10
perf script -s perf-script.py

附上 perf-script.py

分析某段时刻的调用栈

Intuition

阻塞

雪崩

Reference