我的程序正在通过他们的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 调用。与许多 Http 客户端一样,OkHttp 在内部使用连接池来加速对同一位置的重复调用。 如果您需要连接不持久,您可以将自己的 OkHttp 客户端传递给具有您自己的池化配置的可用构造函数之一,但我不建议这样做。
Minio 可能应该公开一个关闭方法来清理这些资源,但它们的预期用例可能涉及在应用程序的整个生命周期中生活的客户端。