如何解决spring boot 和 Files.nio 的 ulimit 问题
我们正在我们的一个项目中使用 spring 批处理和集成
我们使用 spring 集成来轮询和监控目录;当文件进入目录时,我们记录并移动到不同的目录
这就是我们的监控方式
@Bean
@InboundChannelAdapter(value = "fileChannel",poller = @Poller(fixedDelay = "1000"))
public MessageSource<File> fileReadingMessageSource() {
FileReadingMessageSource sourceReader= new FileReadingMessageSource();
sourceReader.setDirectory(new File(INPUT_DIR));
sourceReader.setFilter(new SimplePatternFileListFilter(FILE_PATTERN));
return sourceReader;
}
一旦文件被轮询,我们将使用以下函数移动一个 diff 临时目录..我们正在使用 java.nio.file.File
Files.move(source,destination,REPLACE_EXISTING);
在文件被复制到复制后的unix框中,即使经过我们的处理,我们仍然看到IO文件引用..这导致容器上打开的文件过多问题
我使用以下命令验证 IO 连接的方式仍然存在:
lsof -u <userid> | grep <file_name>
目前,我们正在重新启动 Spring Boot 应用程序以解决此问题。有解决此问题的想法/建议吗?
解决方法
显然,您在 fileChannel
的下游有一些逻辑,它为文件打开一个 InputStream
以读取其内容。并且您只是在阅读后不关闭该流。 Files.move()
与打开/关闭文件资源无关。请参阅其 JavaDocs。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。