java - TCP 客户端套接字填满堆

标签 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();

最佳答案

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

关于java - TCP 客户端套接字填满堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29705609/

相关文章:

python - 当我在python中导入socket时,为什么它会跳过socket.bind?

java - 从服务器到客户端的套接字通信困难

java - "java.net.NoRouteToHostException: Cannot assign requested address"是什么?

jmap 命令 : Premature EOF 的 Java 堆转储错误

java - 如何修复错误 : "INFO: HHH000206: hibernate.properties not found"?

java - WebDriver点击 "Java window"

java - 如何在Java中生成列表的所有k-sublists?

Android TCP发送数据

sockets - 为什么即使我没有使用 close() 函数,tcp 连接也会关闭?

c++ - 使用 boost::asio 配置 TCP keep_alive