Hello!
2014-11-04 19:58 GMT-08:00 周诚:
> “呃。。。你的火焰图看起来有些不对劲的样子。貌似有很多函数帧都缺少调试符号?许多调用栈貌似都被截断了。。。
>
> 想下这种情况是怎么发生的,有什么办法解决调用针截断的问题?
>
调用栈截断一般有两种原因:
一是因为 systemtap 默认的限制过小,需要自己显式指定 -DMAXBACKTRACE=N 和 -DMAXSTRINGLEN=2048
这两个 systemtap 选项。具体可以参考我的 sample-bt 工具的实现 [1](一般生成火焰图可以直接使用这个
sample-bt 工具,可以节省很多麻烦,仅仅是这里提到的限制)。
二是因为对应的 C 调用栈是由缺少静态调试符号的机器指令发起的(比如是由某个 JIT 编译器生成的机器代码发起)。
同时抄送给 openresty 中文邮件列表,一般建议在那里交流这样的问题。细节见 http://openresty.org/#Community
Regards,
-agentzh
[1] https://github.com/openresty/nginx-systemtap-toolkit#sample-bt