如何防止从 close_wait 个连接打开太多文件

How prevent too many file open from close_wait connections

我的程序正在通过 Java SDK.

在 min.io 服务器上获取一些图像

问题是,即使在 inputStream.close() 之后,java 代码中的连接仍然保持打开状态。我可以用 lsof -p <PID>.

看到它

一段时间后,它会消失,但有时不会消失,我想速度足够快,java 服务器会抛出一些 too many open files 错误。

是否有垃圾收集器从操作系统中删除连接? 如何防止这些 too many open files 错误?

以防万一,这里是代码:

public static byte[] getImageByImageBinaryId(String imagId) throws IOException {
    InputStream object = null;

    try {
        object = getMinioClientClient().getObject(ServerProperties.MINIO_BUCKET_NAME, imagId);
        return IOUtils.toByteArray(object);
    } catch (Exception e) {
        log.error(e);
    } finally {
        IOUtils.closeQuietly(object);
    }

    return null;
}

minio-java 内部使用 OkHttp 进行 HTTP 调用。 OkHttp 和许多 Http 客户端一样,在内部使用连接池来加速对同一位置的重复调用。如果您需要连接不持久,您可以将您自己的 OkHttp 客户端传递给具有您自己的池配置的可用构造函数之一,但我不推荐它。

Minio 可能应该公开一个 close 方法来清理这些资源,但他们的预期用例可能涉及客户端在您的应用程序的整个生命周期中。