我们想要了解我们程序在运行时候的真实情况,但是感觉 rust 性能方面的调试真的比 go 麻烦非常多。
首先在 rust cargo.toml 中添加
[profile.release] debug = true
直接在 pod 里面进行调试限制比较多,首先我们可能需要安装一些必要的东西比如 perf 本体
在 ubuntu 的环境下
apt-get update apt install linux-perf
执行
perf record -g -p 1
会得到一些内核的报错信息,默认配置下指向我们的权限不足我们需要调整 node 上的一些内核参数
/proc/sys/kernel/perf_event_paranoid=1 /proc/sys/kernel/perf_event_mlock_kb 8192 cat /proc/sys/kernel/kptr_restrict 0
执行
perf record -g -p 1 过于会儿之后手动停掉采样使用 perf report 查看报告
然后我们会看到这样一个报告
但是 symbol 的部分居然都是一些内存地址,看得人一头雾水。我们需要获得一些跟代码相关的信息
当然我们可能会觉得火焰图更好看一些,我们可以尝试使用 FlameGraph,我在测试环境将这个工具打包进 pod
然后在数据生成之后使用可以将已经生成好的
perf.data => out.perf
perf script > out.perf
然后直接使用打包进去的 FlameGragh 工具生成 SVG 烈焰图即可
./FlameGraph/stackcollapse-perf.pl out.perf > out.folded ./FlameGraph/flamegraph.pl out.folded > flamegraph.svg
其实我感觉在生成了 data 之后,想办法从 pod 里面讲将数据拿出来分析会比较方便。pod 里面什么工具都没有还是比较麻烦的。
标签:kernel,perf,kubernets,rust,pod,调试,out From: https://www.cnblogs.com/piperck/p/17535807.html