2014-11-28 3 views
0

저는 각 액터가 웹 서비스를 호출하는 Akka 애플리케이션을 작업했습니다. 성능 테스트가 실행되면 액터는 약 6 분 후에 매우 천천히 반응하기 시작합니다. 성능을 테스트하고 문제가 보이지 않는 단위 테스트를 만들었습니다. 이것이 일반적인 질문이라는 것을 알고 있지만 문제가있는 곳을 발견하기 위해 조사 할 수있는 일반적인 영역이 있습니까? 모든 http://doc.akka.io/docs/akka/snapshot/scala/routing.htmlakka 성능 디버깅

답변

4

먼저 표준 도구 jvisualvm, jconsole를 사용하여 응용 프로그램의 일반적인 상태를 확인 : 내가 고려하고

한 지역은 라우팅이다.

모든 기본 매개 변수 (CPU, 메모리, 스레드 상태가) 정확하면, 당신은 스택 docker-config

수동 get-started을 따를 수 kamon.io 및 garfana/statsd/흑연을 사용하여 특정 배우를 모니터링 시도하고 다음과 같은 구성을 적용해야 당신의 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

당신이 그냥 시스템이 CPU 바인딩 된 가능성의 원격 웹 서비스를 호출 감안할. 당신이보아야 할 것들이 있습니다 (프로파일 링 도구를 사용하여, 나는 Yourkit을 강력히 추천합니다. 라이센스 비용을 지불하고 싶지 않으면 VisualVM을 사용할 수 있습니다). 귀하가 어떤 샘플 코드도 게시하지 않았기 때문에 귀하의 경우에 다음 중 하나라도 해당되는지 말할 수 없습니다.

  1. 액터의 수신 방법에 차단 코드가 있습니다. 즉, 웹 서비스가 돌아 가기에는 너무 오래 걸리면 돌아가는 것을 막을 수 있습니다.

  2. 액터 시스템에 충분한 메모리가 없습니다.

  3. 메모리 누수가 있습니다. 예를 들어, 당신은 그들이 자신의 웹 서비스 호출을 완료 한 후 배우를 죽이거나 당신이 마지막으로 @hicolour 언급 kamon.io로 배우

를 재사용하는/중지하는 것은 성능 병목 현상을 찾을 수있는 좋은 도구입니다.