TCP客户端套接字填满堆

时间:2015-04-17 17:17:22

标签: java sockets tcp serversocket

使用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();

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您可以使用socket.setSendBufferSize()。

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