TCP 客户端套接字填满堆

TCP client socket filling up heap

使用 java 套接字库,我看到当服务器接受 tcp 连接但不从缓冲区读取数据时,同时我们的客户端不断抽取大量数据,客户端堆大小增长到最大可用并压碎客户端应用程序。 无论如何我可以限制套接字缓冲区大小或使用该堆的任何内容,如果违反它,连接将被终止?这样客户端可以检测到客户端检测到连接已经消失

客户端;

  this.socket = new Socket(server, port);
  this.socket.setKeepAlive(true);
  this.outwriter = new OutputStreamWriter(this.socket.getOutputStream());
  this.outwriter.write(o.toString()); 

服务器端;

conn = serverSocket.accept();

您可以使用 socket.setSendBufferSize()。

虽然这有助于测试您的理论,但正如@EJP 所提到的,堆泄漏不会是由于发送缓冲区被填满造成的。在这种情况下,写入操作将 return 错误。

这不是套接字引起的。您的应用程序中的其他地方存在内存泄漏。您描述的行为最终将阻塞在 write() 方法中,并且不会消耗任何堆内存。