10

我们在负载测试和扩展 akka 应用程序方面取得了一些不错的进展,但我们看到 scala.concurrent.forkjoin.ForkJoinPool.scan() 在 vi​​sualvm 中大约 20% 的自身时间成为第二高的热点。自用时间 (CPU) 列仅表示其中的一小部分(小于自用时间列值的 1%)。

我怀疑这意味着阻塞或上下文切换可能存在问题,但我不太确定 - 任何人都可以提供见解吗?如果是上下文切换,我猜将调度程序的吞吐量调整到更高的数字可能会给我们带来收益,否则如果它是由阻塞引起的,我们将需要更多地阅读代码。

任何见解都非常感谢。

4

1 回答 1

11

扫描方法也是 ForkJoinPool 中的非活动线程在找不到工作时“停放”的地方。

拥有 20% 的自身时间和 1% 的自身 CPU 时间让我认为您在 ForkJoinPool 中有非活动线程停在那里。

我假设您在采样模式下使用 VisualVM。默认情况下,VisualVM 会过滤掉标准库中的内容。请参阅此答案如何更改设置并更好地了解正在发生的事情。https://stackoverflow.com/a/16113781/1688542

于 2013-10-03T13:02:02.103 回答