java - 绑定(bind)状态的套接字太多

标签 java sockets

在我们的一个客户系统中,我们面临着打开文件过多的错误,目前 FD 限制设置为最大值,并且这种情况每周发生一次。

在看到 lsof 和 netstat o/p 之后,我能够看到太多套接字处于绑定(bind)状态 (20K)。据我所知,这种状态是一种 transient ,我无法找到它实际泄漏的位置。当我在 heapDump 中看到有界套接字之一时,我看到以下 GC 引用

>java.net.InetSocketAddress
 >> sun.nio.ch.SocketChannelImpl
  >>>sun.nio.ch.SocketAdaptor
   >>>>java.net.SocksSocketImpl
    >>>>>java.lang.ref.Finalizer 

我不知道如何解决这个问题。我需要专家的意见吗?

最佳答案

为了确保套接字是 close()d,它是从 Finalizer 线程关闭的。

Finalizer 线程是单线程的,如果它运行缓慢(例如,因为您没有正确关闭连接),您创建套接字的速度可能比清理套接字的速度快。

首先要检查的是堆栈转储,看看终结器线程通常在等待什么。其次,检查您是否总是在使用完套接字连接后关闭它们。套接字仍将添加到终结器队列中,但它们不会花任何时间检查它们是否已关闭。

关于java - 绑定(bind)状态的套接字太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11653688/

相关文章:

java - java序列化中的readObjectNoData有什么用?请举例说明?

java - 将我的 JPA 应用程序部署到 Websphere 7 时出现异常

python - python中的屏幕共享

Android 蓝牙套接字未创建

ios - 如何快速打开多个套接字连接?

c++ - async_send 数据未发送

java - SQL查询一对多

java - Tomcat JDBC 池连接全部卡在Socket Read,没有创建新连接

Python 套接字发送缓冲区与。强度

java - 如何在后台线程中正确执行SQL查询?