gpt4 book ai didi

java - 打开的文件太多 : how many are open, 它们是什么,JVM 可以打开多少个

转载 作者:行者123 更新时间:2023-12-01 19:15:47 25 4
gpt4 key购买 nike

我在 Java 中遇到此异常:

java.io.FileNotFoundException: (Too many open files) 

我正在寻找消除这个问题的方法。

这个错误显然表明 JVM 分配了太多句柄,而底层操作系统不允许它拥有更多句柄。要么是我在连接/流关闭不当的地方发生了泄漏。

这个过程连续几天不间断地运行,最终抛出异常。在正常运行 12-14 天后,这种情况会反复发生。

你如何应对这个问题?有没有办法获取 JVM 中已分配句柄的列表或在达到一定数量时进行跟踪?我很想把它们打印出来,看看它是如何生长的以及何时生长的。我无法使用探查器,因为它是一个生产系统,并且很难在开发中重现它。有什么建议吗?

我正在监视空闲堆大小,并在其接近 -Xmx 中指定的总数的 1% 时发出“警报”。我还知道,如果我的线程数超过 500,那么事情肯定会失控。现在,有没有办法知道我的 JVM 从操作系统分配了太多句柄并且没有将它们返还,例如套接字、打开的文件等。如果我知道这些,我就会知道在哪里以及何时查看。

最佳答案

您没有说明您正在运行哪个操作系统,但如果您在 Linux 上运行,则可以使用 lsof 命令

lsof -p <pid of jvm>

这将列出 JVM 打开的所有文件。或者,如果您在 Windows 上运行,则可以 Process Explorer这将显示所有进程的所有打开文件。

这样做有望让您缩小保持文件打开状态的代码范围。

关于java - 打开的文件太多 : how many are open, 它们是什么,JVM 可以打开多少个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59420468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com