首页 文章

调试akka性能

提问于
浏览
0

我正在开发一个Akka应用程序,每个actor调用一个Web服务 . 当进行性能测试时,演员在大约6分钟后开始响应非常缓慢 . 我已经创建了一个单元测试来测试性能而没有看到任何问题 . 我意识到这是一个通用的问题,但我是否可以调查一下应用程序的一般领域,以发现问题所在?

我正在考虑的一个领域是路线:http://doc.akka.io/docs/akka/snapshot/scala/routing.html

2 回答

  • 4

    首先使用标准工具jvisualvmjconsole检查应用程序的一般条件 .

    如果所有基本参数(cpu,内存,线程状态)都正确,那么你应该尝试使用kamon.io和garfana / statsd / graphite stack监视特定的actor docker-config

    您可以按照get-started手册并在 application.conf 中应用以下配置

    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"
        }
      }
    }
    
  • 1

    鉴于您只是调用远程Web服务,您的系统不太可能受CPU限制 . 以下是您应该注意的事项(使用分析工具,我强烈推荐YourKit . 如果不想支付许可证,您可以使用VisualVM) . 由于您尚未发布任何示例代码,因此无法确定在您的情况下是否存在以下任何一种情况 .

    • 你的actor的receive方法中有阻塞代码 . 这意味着如果Web服务需要花费太长时间才能返回并且您阻止它们返回,那么您将很快耗尽线程 .

    • 你没有为你的演员系统提供足够的内存 .

    • 内存泄漏 . 例如,您是在完成他们的Web服务调用后停止/杀死演员还是您正在重用演员

    最后,@ hicolour提到kamon.io是一个很好的工具,可以找到性能瓶颈 .

相关问题