请在2024 Clojure 状态调查中分享您的想法!

欢迎!请参阅关于页面以了解更多关于如何使用本站的信息。

0
头像 Clojure

我使用VisualVM找到了代码的性能瓶颈,但它显示所有时间都在LockingTransaction内消耗。有没有任何技巧可以在事务中获取性能结果?

profileTransaction.png gist

1 个回答

0
头像
被选中
 
最佳答案

我不确定是否有很好的方法来真正查看事务中的细节。事务通常应该是尽可能简单的,因为它们是可重试的关键部分,所以我通常更关注诸如ref更新的竞争等问题,对于这一点,你可能需要使用不同的分析技术(寻找等待/停滞的线程)等。

如果我现在处于这个位置,我认为与其使用分析器,不如尝试使用我的大脑工具来思考事务中的工作/竞争,这些工作/竞争可以被拉出关键部分,或者是否可以解除引用的纠缠,这样就不需要协调。

如果您想分享更多关于引用或事务代码的信息,这可能有助于激发这些想法。

感谢Alex!需要使用braintool,是不是!我能给出的最简单的描述就是它遵循Rich Hickey的蚂蚁模拟代码(参见https://github.com/ilmotta/clojure-ants-simulation/blob/master/README.org)。我尽量使代码在我的`dosync`循环中保持尽可能小,通常只包含`alter`语句。但至少在使用VisualVM的情况下,我甚至无法知道是哪一个`dosync`的事务(有好几个)在消耗时间。
...