Apache NMS抛出已建立的连接被主机中的软件在大量使用时中止

时间:2015-04-27 16:07:51

标签: c# .net activemq nms apache-nms

背景
C#WPF应用程序通过ActiveMQ / JSON与Linux上运行的JAVA服务器交谈 总共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以批量确认

0 个答案:

没有答案