Scala演员的线程监控

3
有没有一种方法可以监控有多少线程实际上是在运行我的Scala Actor?
2个回答

5

唯一正确的方法是为演员子系统注入自己的执行器,默认情况下,演员线程没有演员或Scala特定的名称(它们可能只被称为Thread-Npool-N-thread-M,具体取决于您使用哪个版本的Scala。

Philip Haller 已经提供了说明,可以使用自己的执行器,在其中可以监视线程使用情况,或者至少命名所创建的线程。如果您覆盖线程命名,则可以使用标准的Java系统MBeans(即ThreadMXBean)以编程方式监视线程(或通过JConsole / JVisualVM)。

请注意,您可以使用系统属性控制默认机制:

  • actors.minPoolSize
  • actors.maxPoolSize
  • actors.corePoolSize

3
你可以尝试使用VisualVM工具(可从Sun免费获得),它可以监控运行中的JVM中的线程,以及其他一些功能。

1
但不会告诉範式化有哪些线程实际上正在为演员提供服务 - oxbow_lakes
1
服务于演员的线程可能会有特殊的名称,以区别于虚拟机线程。如果一个线程不是虚拟机线程,并且不是由您创建的,则很可能是演员线程。所以加1。 - Seun Osewa
@Seun - 不幸的是,他们没有这样的东西。根据您运行的Scala 2.7.5或2.7.7版本,它们可能是“Thread-N”或“pool-N-thread-M”。对于这个问题,唯一正确的答案是注入自己的调度程序。 - oxbow_lakes

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