4 个版本 (重大更新)
0.4.0 | 2020年2月18日 |
---|---|
0.3.0 | 2019年6月19日 |
0.2.0 | 2019年6月19日 |
0.1.0 | 2019年6月18日 |
在 性能分析 中排名第 387
73KB
1.5K SLoC
strace 文件解析器
注意:推荐的 strace 选项包括:-f -ttt -T -,其中 -ttt 提供微秒绝对时间戳,-T 提供系统调用的持续时间。-f 跟踪分支(包括线程);包括单线程进程的 pids。其他选项有各种(较差)权衡。
命令行界面
strace-stats
后处理常规 strace 文件以获取类似 strace -c 生成的统计信息。
$ strace-stats FILENAME
"filename"
% time seconds usecs/call calls errors syscall
------ ------------ ----------- --------- --------- ----------------
96.86 29670.010031 0.306047 96946 futex
1.76 539.832878 4.284388 126 epoll_wait
0.64 196.346132 0.009388 20914 close
0.27 82.860597 0.000639 129668 write
0.21 65.616397 0.003282 19994 fchmod
已知问题:错误不会报告(当前解析器语义不足)。
API
解析层(核心功能)
- 原始解析层:bytes -> structs/enums + 天滚动检测。
- 开始/停止组合:将相同系统调用的半开事件合并为一个关闭事件。
导出器
- 事件跟踪格式(计划中)
分析层(推测性)
- 生命周期分析:分析资源的生命周期使用情况。
- 并发分析:查找系统调用之间的交互。
理想情况下,无需配置,只需将 strace 内容输入引擎,遍历所需的层即可。然而,如果格式过于模糊,则原始解析层将是配置发生的地点。虽然可以通过限制支持的版本和 strace 选项来保证无歧义的格式,但越接近“即用即得”越好,因为用户会更喜欢这种易用性;因此,在易用性和可靠性之间有一个权衡;目前这是偏向于易用性的。
贡献
解析失败
至少:一个带有附加的 strace 片段的错误报告,展示失败情况。
如果您有时间,一个包含回归测试和错误修复的 PR 会很好。
其他事项
一个描述您想要实现什么的错误报告,或者一个实现它的 PR - 至少要有足够的测试,这样其他作者在将来就不必担心错误地撤销您的工作。
实现说明
解析器是内部细节 - 未来可能会重新实现/替换/等等。
常见问题解答(FAQ)
Q: 处理时间
时间戳是可选的,或者可以是相对的。因此理想情况下,我们拥有绝对微秒时间戳(-ttt),但我们可能只有同一天(-t/-tt)或相对时间戳(-r),或者根本没有时间。在后一种情况下,虽然我们可以对系统调用进行部分排序,但我们不能建立时间线,但我们可以仍然通过 <未完成 ...>
标记给出的排序来确定(某些)并发系统调用。对于 -t/-tt,每次时钟溢出时,我们会在返回的持续时间中添加一个人工日。
Q: 为什么这不仅仅是针对
https://github.com/wookietreiber/strace-analyzer ?
A: https://github.com/wookietreiber/strace-analyzer#features-that-will-not-be-implemented - 该项目值得称赞的是它对命令行界面的关注;我需要一个库来处理我遇到的各种过程-a-strace文件问题。
许可证
Apache-2.0 协议
作者
罗伯特·柯林斯
依赖关系
~3.5–4.5MB
~88K SLoC