- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想从我的 Java 应用程序中收集堆栈跟踪以创建 CPU Flame Graphs用于分析。
这与这个问题非常相似:How to get complete stack dump from profiler in every sample for use in flame graph?有两个区别:
pref
并且 OSX 上的 AFAIK dtrace
不支持 jstack
扩展)。 我已经试过了lightweight-java-profiler和 Honest profiler ,而且它们似乎都不适用于 Mac。我也试过VisualVM ,但我无法让它生成我需要的堆栈跟踪转储。
对我来说,首要任务是从 Java 堆栈跟踪生成火焰图,但如果拥有 native 调用堆栈也很棒,因为它可以让我解决 I/O 问题(甚至可能生成 hot/cold flame graphs)。
最佳答案
好消息,FlameGraph 存储库有一个“脚本”可以与已经在其中的 jstacks 一起工作。
https://github.com/brendangregg/FlameGraph
它是 stackcollapse-jstack.pl
。
似乎在默认情况下,它只期望输入中的堆栈跟踪后堆栈跟踪,并将每个堆栈跟踪都计为“样本点”。
所以你可以在一个文件中执行多个 jstack(运行一次或几次,或者每秒一次“一段时间”等):
jstack pid_of_your_jvm >> my_jstack
然后执行该脚本:
./stackcollapse-jstack.pl my_jstack > my_jstack.folded
最后转换为火焰图:
./flamegraph.pl --color=java my_jstack.folded > my_jstack.svg
不需要第三方助手(尽管它们可能仍然有用)。
另请注意,stackcollapse-jstack.pl
文件会丢弃非 RUNNABLE 线程,如果您还想包含“空闲”线程(通常不需要),您可能需要对其进行调整。
显然,您也可以使用 linux“perf”命令为 java 进程生成堆栈,请参阅自述文件 https://github.com/brendangregg/FlameGraph
例如,这可能包括更多 native 调用。
关于java - 如何获取用于在 Mac 上创建火焰图的 Java 分析转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27228972/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!