火焰图分析 nginx 性能
2019-04-06 本文已影响0人
akka9
nginx 的cpu 负载有点高,用火焰图分析一下性能瓶颈。
使用官方的内核版本:
yum install -y systemtap systemtap-runtime gcc
debuginfo-install -y glibc kernel-debuginfo-$(uname -r) kernel-devel-$(uname -r)
# yum --enablerepo=base-debug install -y kernel-debuginfo-$(uname -r)
git clone https://github.com/openresty/openresty-systemtap-toolkit.git
git clone https://github.com/brendangregg/FlameGraph.git
cd openresty-systemtap-toolkit
pidworker=1563772
sampletime=60
sudo ./sample-bt -p $pidworker -t $sampletime -u -a '-DMAXACTION=100000 -DMAXSKIPPED=100000' > /tmp/nginx.bt
sudo ../FlameGraph/stackcollapse-stap.pl /tmp/nginx.bt > /tmp/nginx.cbt
sudo ../FlameGraph/flamegraph.pl /tmp/nginx.cbt > /tmp/nginx.svg
sudo ./sample-bt-off-cpu -p $pidworker -t $sampletime -u -a '-DMAXACTION=100000 -DMAXSKIPPED=100000' > /tmp/nginx-off.bt
sudo ../FlameGraph/stackcollapse-stap.pl /tmp/nginx-off.bt > /tmp/nginx-off.cbt
sudo ../FlameGraph/flamegraph.pl /tmp/nginx-off.cbt > /tmp/nginx-off.svg
提示:可以先到 http://debuginfo.centos.org/7/x86_64/
下载好再安装。
perf
cd FlameGraph
pidworker=1617191
sudo perf record -F 99 -p $pidworker -g -- sleep 30
perf script -i perf.data &> perf.unfold
./stackcollapse-perf.pl perf.unfold &> perf.folded
./flamegraph.pl perf.folded > perf.svg
分析发现,有 hpet 相关的,先把时钟切换到 xen
echo xen > /sys/devices/system/clocksource/clocksource0/current_clocksource
strace 查看 发现大量的 gettimeofday ,在 nginx 的 main 配置中,
增加配置 timer_resolution 500ms; 可以比较明显的降低负载。
ref:
https://ytlm.github.io/2017/04/%E5%AE%89%E8%A3%85systemtap%E7%94%9F%E6%88%90openresty%E7%9A%84%E7%81%AB%E7%84%B0%E5%9B%BE/
https://www.ruilog.com/notebook/view/9ff8def96d9c.html