Java 调试akka性能

Java 调试akka性能,java,performance,scala,debugging,akka,Java,Performance,Scala,Debugging,Akka,我正在开发一个Akka应用程序,其中每个参与者调用一个web服务。运行性能测试时,参与者在大约6分钟后开始缓慢响应。我创建了一个单元测试来测试性能,没有发现任何问题。我意识到这是一个一般性的问题,但我是否可以调查应用程序的一般领域以发现问题所在 我考虑的一个方面是路由:首先使用标准工具检查应用程序的一般情况 如果所有基本参数cpu、内存、线程状态都正确,那么您应该尝试使用和garfana/statsd/graphite堆栈监视特定的参与者 您可以按照手册的要求在application.conf中

我正在开发一个Akka应用程序,其中每个参与者调用一个web服务。运行性能测试时,参与者在大约6分钟后开始缓慢响应。我创建了一个单元测试来测试性能,没有发现任何问题。我意识到这是一个一般性的问题,但我是否可以调查应用程序的一般领域以发现问题所在


我考虑的一个方面是路由:

首先使用标准工具检查应用程序的一般情况

如果所有基本参数cpu、内存、线程状态都正确,那么您应该尝试使用和garfana/statsd/graphite堆栈监视特定的参与者

您可以按照手册的要求在application.conf中应用以下配置


首先,使用标准工具检查应用程序的一般情况

如果所有基本参数cpu、内存、线程状态都正确,那么您应该尝试使用和garfana/statsd/graphite堆栈监视特定的参与者

您可以按照手册的要求在application.conf中应用以下配置


鉴于您只是调用远程web服务,您的系统不太可能受到CPU的限制。以下是您应该使用分析工具查看的可能事项,我强烈推荐您的工具包。如果您不想为许可证付费,可以使用VisualVM。由于您没有发布任何示例代码,我不能说下面的任何一条在您的情况下是否正确

在参与者的接收方法中有阻塞代码。这意味着您将很快耗尽线程,如果web服务返回的时间太长,并且您正在阻止它们返回

您没有为actor系统提供足够的内存

内存泄漏。例如,您是在参与者完成web服务调用后停止/杀死参与者,还是重用参与者


最后,@hicolour提到,kamon.io是发现性能瓶颈的绝佳工具

鉴于您只是调用远程web服务,您的系统不太可能受到CPU的限制。以下是您应该使用分析工具查看的可能事项,我强烈推荐您的工具包。如果您不想为许可证付费,可以使用VisualVM。由于您没有发布任何示例代码,我不能说下面的任何一条在您的情况下是否正确

在参与者的接收方法中有阻塞代码。这意味着您将很快耗尽线程,如果web服务返回的时间太长,并且您正在阻止它们返回

您没有为actor系统提供足够的内存

内存泄漏。例如,您是在参与者完成web服务调用后停止/杀死参与者,还是重用参与者


最后,@hicolour提到,kamon.io是发现性能瓶颈的绝佳工具

如何在Akka 2.1中使用Kamon?如何在Akka 2.1中使用Kamon?
kamon
{
  metrics
  {
    actor {
      filters = [
        {
          actor {
            includes = ["*"]
            excludes = ["system/*", "user/IO-*"]
          }
        },
        {
          router {
            includes = ["*"]
            excludes = ["system/*", "user/IO-*"]
          }
        },
        {
          trace {
            includes = ["*"]
            excludes = []
          }
        },
        {
          dispatcher {
            includes = ["default-dispatcher"]
            excludes = []
          }
        }
      ]
    }
  }
  statsd {
    hostname = "10.0.1.4"
    port = 8125
    flush-interval = 1 second
    max-packet-size = 1024 bytes

    includes
    {
      actor = ["*"]
      trace = ["*"]
      dispatcher = ["*"]
    }
    simple-metric-key-generator {

      application = "test.akka"
    }
  }
}