1

背景:
ActiveMQ/JSON を介して Linux で実行されている Java サーバーと通信する C# WPF アプリケーション
接続の合計 5 インスタンス:
キュー: 2
トピック: 3 (1 プロデューサー、2 コンシューマー)

問題:
頻繁に使用すると (500 ミリ秒未満で約 200 件のメッセージを送受信するスループット レートと、約 1 ~ 1.2 GB のメモリ ワーキング セット)、「確立された接続がホスト マシンのソフトウェアによって中止されました」がスローされます。

サンプルスタック:

Apache.NMS.NMSException: Unable to read data from the transport connection: An established connection was aborted by the software in your host machine. ---> System.IO.IOException: Unable to read data from the transport connection: An established connection was aborted by the software in your host machine. ---> System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine
   at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count)
   at System.IO.BinaryReader.FillBuffer(Int32 numBytes)
   at System.IO.BinaryReader.ReadInt32()
   at Apache.NMS.Util.EndianBinaryReader.ReadInt32()
   at Apache.NMS.ActiveMQ.OpenWire.OpenWireFormat.Unmarshal(BinaryReader dis)
   at Apache.NMS.ActiveMQ.Transport.Tcp.TcpTransport.ReadLoop()

これまでに試した

  • 非アクティブ モニタリングをオフにして、5 つの接続間のトラフィックを減らしました。ほとんどの場合、アプリケーションには独自のハートビート実装があるためです。
  • ConnectionFactory.OptimizeAcknowledge を true に設定して、確認をバッチ処理します
4

0 に答える 0