2017-05-17 1 views
2

원격 액터에 대한 동시 요청에 대한 응답이 응답하는 데 오랜 시간이 걸렸습니다. 일명 요청에는 300 밀리 초가 걸리지 만 100 개의 동시 요청에는 완료하는 데 약 30 초가 걸렸습니다! 따라서 요청이 순차적으로 실행되는 것처럼 보입니다. 요청 크기는 작지만 응답 크기는 직렬화 이전에 JVM에서 약 120kB였습니다. 그러나 응답에는 깊은 중첩 된 사례 클래스가있었습니다.akka 원격 액터를 통해 더 큰 메시지를 전송하는 성능 문제

응답 시간은 동일한 시스템의 두 개의 서로 다른 JVM에서 실행될 때 비슷합니다. 그러나 동일한 JVM (즉, 로컬 액터)에서 응답이 빠릅니다. 하나의 원격 액터에 동시 요청을하는 단일 클라이언트입니다.

이 로그는 akka 디버그 로그에 표시됩니다. 이것은 무엇을 나타 냅니까?

DEBUG 테스트 응용 프로그램 akka.remote.EndpointWriter - maxWriteCount와 물기 버퍼 : 50, fullBackoffCount : 546, smallBackoffCount : 2, noBackoffCount : 1, adaptiveBackoff : 2000

답변

2

로그는 것을 보여 write-buffer에 쓰기가 실패했습니다. 이

  • 전송 버퍼가 원격 배우의 측면에
  • 수신 버퍼는 네트워크

송신 버퍼 크기를 발행

  • 너무 작 너무 작다는 것을 나타냅니다 직접 버퍼 크기를받을 수 동시 요청과 응답의 수를 제한합니다! 클라이언트와 서버 모두에서 필요한 동시성을 지원하기 위해 클라이언트와 서버 모두에서 송신 버퍼와 수신 버퍼 크기를 늘리십시오.

    버퍼 크기가 충분하지 않으면 netty는 버퍼에 다시 쓰기를 시도하기 전에 버퍼가 지워질 때까지 기다립니다. 그리고 기본적으로 백 오프 시간도있을 것이고 이것은 또한 구성 될 수 있습니다.

    설정은 remote.netty.tcp 미만 : 전체 구성의

    akka { 
    remote { 
        netty.tcp { 
        # Sets the send buffer size of the Sockets, 
        # set to 0b for platform default 
        send-buffer-size = 1024000b 
    
        # Sets the receive buffer size of the Sockets, 
        # set to 0b for platform default 
        receive-buffer-size = 2048000b 
        } 
        # Controls the backoff interval after a refused write is reattempted. 
        # (Transports may refuse writes if their internal buffer is full) 
        backoff-interval = 1 ms 
    } 
    } 
    

    Akka reference config를 참조하십시오.

  • 관련 문제