Clojure 的性能分析工具?

41

有没有人知道一个适合Clojure的好的分析工具或库?

我希望能够像很久以前在 Allegro Common Lisp 中使用 (with-profiling ...) 一样,从 REPL 中使用该工具。

是否有类似的工具?

或者你有没有使用过适用于Clojure的(非商业化)Java分析工具呢?

4个回答

29

我发现 VisualVM (可在 这里这里 找到)非常方便。关于它与 Clojure 的使用,可以参考一年前的这篇博客文章;据我所见,它并没有过时。

请注意,用于启动 VisualVM 分析器的 GUI 具有一个重要的文本区域,您可以在其中输入要从分析中排除的类 / 包 —— 在我的观察中,将 clojure.* 加入该列表后,结果更加有用。


感谢提供指针。监视器部分 - 堆内存和 CPU 使用率 - 非常方便。但是,我正在努力从 CPU 分析器中获得任何有用的信息。对于 Project Euler 问题的解决方案进行分析时,我的代码中最大的贡献者在几分钟的运行时间中超过了 300 毫秒... 是否有任何方法可以提供“总时间”(调用堆栈上花费的时间)而不是“自身时间”(在调用堆栈顶部花费的时间)? - j-g-faustus
实际上,这个问题在stackoverflow上已经有了解答,https://dev59.com/fHI-5IYBdhLWcg3wYXH8 -- 建议对分析结果进行快照并进行分析是好的,这会给你一个漂亮的“调用树”视图,其中包括总方法时间。还要记住的一件事是,这是单段命名空间可能会出现问题的地方(据我所知,这是最近我与Licenser在#clojure中进行的一次分析会话中一些函数“不可见”的原因),尽管我不能保证它们会在您的特定情况下破坏事物。;-) - Michał Marczyk
我会接受你的答案 :) 不完全是我想要的,但它似乎是最接近的可用选项。谢谢。 - j-g-faustus
1
这是一个使用VisualVM获取你所需数据的屏幕录像:http://rhnh.net/2011/08/03/profiling-clojure - Xavier Shay

15

1
我更喜欢这个工具而不是VisualVM,因为它使用起来很轻便且易于控制。 - Yu Shen
这似乎仅为ClojureScript提供了分析功能。 - Ben Kovitz
2
性能分析在timbre中已被弃用,现在在tufte中:https://github.com/ptaoussanis/tufte - olieidel

10

刚刚发现Clojure contrib中有一个名为profile的工具。

它对于大量代码不起作用(在VisualVM可以处理的Project Euler解决方案上因内存溢出而崩溃),并且需要在要进行分析的函数中插入分析调用。

尽管如此,它仍然是一种更好的选择,可以在你只想分析一些函数的情况下使用,相比之下,它比VisualVM更加优秀。


2
这个现在已经过时了。 - Yu Shen

10

提醒大家一下,我已经停用 Timbre 的分析工具,换成了一个新的专门用于Clojure和ClojureScript分析的库,网址是 https://github.com/ptaoussanis/tufte

这基本上是对 Timbre 工具的改进,还有专门的文档。

README 文件包含了与 VisualVM、YourKit 等 JVM 工具的比较


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接