2017-05-17 15 views
2

リモートアクターへの同時要求への応答に時間がかかりました.1回の要求には300ミリ秒かかりますが、100個の同時要求には30秒ほどかかりました。それで、リクエストは順番に実行されているようです。要求サイズは小さいですが、JVMでは応答サイズが約120 kBでした。しかし、この応答には深いネストされたケースクラスがありました。akkaリモートアクター経由で大きなメッセージを送信する際のパフォーマンスの問題

同じマシン上の2つの異なるJVMで実行している場合の応答時間は似ています。しかし、同じJVM(つまりローカルアクター)で応答が高速です。これは、1つのリモートアクタに対して同時に要求を行う単一のクライアントです。

このログは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を参照してください。

関連する問題